在我的存储库中,我已经通过
添加了一个子模块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忽略子模块有变化?
答案 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,子模块也可以恢复到同一点。