如何防止git让我提交子模块修改

时间:2016-10-06 16:00:15

标签: git git-submodules

在我的存储库中,我已经通过

添加了一个子模块
git submodule add -b master https://something.something.git something

现在,只要我听到子模块中有更新(远程),我就

git submodule update --remote

子模块在本地更新。如果我在某个地方克隆我的仓库,我会立即将子模块置于最新状态。

但是如果我在更新子模块后在我的存储库中运行git status,我会得到

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)

        modified:   something (new commits, modified content)

no changes added to commit (use "git add" and/or "git commit -a")

为什么在跟踪最新的分支时,我需要承诺子模块中发生了一些变化?正如我所说的,如果我在其他地方克隆了repo,我会立即得到更新的子模块,那么这个状态信息是什么?

有没有办法让git忽略子模块有变化?

2 个答案:

答案 0 :(得分:3)

Git实际上忽略了对子模块的更改,它确实记录了适合此提交的子模块的版本。

例如,如果您在repo的分支v1和子模块的v1上,那么继续制作子模块的v2和repo的v2(只能与v2兼容),如果你是将您的repo还原为v1,还需要还原为使用子模块的v1。 Git不会跟踪在子模块的v1和v2之前发生的实际更改,而只是提交一个指向子模块所在的提交的指针。

答案 1 :(得分:0)

git help status

尝试

git status --ignore-submodules=all

请参阅“--ignore-submodules”

的其他选项的文档

但是为了从SuperRepository中获益,您应该像文件一样提交对子模块的更改。因此,子模块提交的提交记录与SuperRepository文件一起处于活动状态。

这样,如果你需要恢复SuperRepos,子模块也可以恢复到同一点。