【问题标题】:git submodule shows as changed in parent directorygit 子模块在父目录中显示为已更改
【发布时间】:2019-10-02 12:34:11
【问题描述】:

我的项目中有一个库作为 git 子模块 签出,我经常在库中进行更改。每次我提交更改时,父 repo 中的后续 git status 显示子模块已更改。我也使用__git_ps1,所以父目录提示显示有未提交的更改。

parent-project (master *) $ git diff
diff --git a/my-submodule b/my-submodule
index 5eb2e9f..fd40630 160000
--- a/my-submodule
+++ b/my-submodule
@@ -1 +1 @@
-Subproject commit 5eb2e9fdcb85ab5a1f57e622b17cc76e5af749b7
+Subproject commit fd406308851b5521980f4578960c428200c66371

我知道两种选择:

  1. git commit submodule 来自创建不必要提交的父级,或
  2. 删除并重新添加子模块,这似乎有点过头了。

有没有办法告诉父 repo 将子模块 ref 更新为最新的 master 并继续?我不想引用特定的 git 修订版,只是引用 master 的负责人或我选择的任何分支。

谢谢!

【问题讨论】:

  • 我经常在库中进行更改是否必须跟踪库?如果没有,也许使用 gitignore 会有所帮助。
  • @BagusTesa 嗯,这似乎没有帮助,只是尝试过。首先git submodule add 抱怨它在.gitignore 中,但这可以强制执行。但即便如此,子模块提交仍然会使父项目变脏:(

标签: git git-submodules


【解决方案1】:

有没有办法告诉父repo 更新子模块ref 到最新的master

是的,使用--remote option

git submodule update --remote

然后继续?

嗯,...这仍然会更改子模块 SHA1 树,因此您仍然需要进行提交,但只要您在父存储库中进行了自己的更改,就可以进行所述提交。

也许你可以在本地忽略它:

cd /parent/repo
git update-index --assume-unchanged -- submoduleFolder # no trailing slash

【讨论】:

  • 你仍然需要提交 ..这是我想避免的。我不想引用特定的子模块提交 ID,而是引用子模块的主模块。或者忽略子模块 sha id 中的任何更改(不幸的是 .gitignore 在这里似乎没有帮助)。
  • @I-P-X 请参阅“真正的 anture oof 子模块”:stackoverflow.com/a/1979194/6309。子模块总是是一个 SHA1 引用加上一个远程 URL。我在答案中包含了一种在本地忽略它的方法。
  • 谢谢,git update-index --assume-unchanged 似乎可以解决问题 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 2015-07-31
  • 2020-03-14
相关资源
最近更新 更多