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

3
在我的代码库中,我通过以下方式添加了一个子模块:
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")

即使我在追踪最新的分支,为什么还需要提交子模块中发生的更改呢?正如我所说,如果我在其他地方克隆该存储库,我会立即获取更新后的子模块,那么这个状态消息是关于什么的?

有没有办法让git忽略对子模块进行的更改?

2个回答

3
Git实际上忽略了对子模块的更改,但它会记录适用于此提交的子模块版本。例如,如果您在存储库的v1分支和子模块的v1上,并且创建了一个子模块的v2和v2的存储库(仅与v2兼容),则如果要将存储库还原回v1,则还需要还原为使用子模块的v1。Git不跟踪在子模块的v1和v2之前发生的实际更改,而只是提交指向子模块所在提交的指针。

经过一些测试,我意识到我对这个工作原理的理解是错误的。 - birgersp

0

看一下

git help status

尝试

git status --ignore-submodules=all

请参阅有关“--ignore-submodules”的其他选项的文档。

但是,为了从SuperRepository中获得好处,您应该像提交文件一样提交对子模块的更改。因此,提交记录将显示哪个子模块提交是活动的,以及SuperRepository文件。

这样,如果您需要还原SuperRepos,则子模块也可以还原到相同的点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接