我正在与几个人一起开展一个git项目,我们已经将一个外部库作为git子模块。我们共享一个常用的遥控器,我们经常推进和拉动。
自从我们第一次添加这个子模块以来,它有一些变化,所以我做了git submodule update --remote
将它更新到最新版本。这对我有用,我把它推到我们的共享遥控器上。存储对提交的引用的子模块位置的文件已更改:
-Subproject commit <old-commit-hash>
+Subproject commit <new-commit-hash>
当我的同事从共享遥控器中提取更改时,他们也会收到更改的子模块,但这似乎与常规文件中的更改不同,因为它不会覆盖旧版本(我期望的),但是当它们运行git status
时显示为更改:
Changes not staged for commit:
modified: src/submodule (new commits)
所以下面的文件发生了变化(我推到的新版本),但不知怎的,git认为我同事的本地版更新。然而,这实际上是旧的,指向我的同事仍然拥有的先前修订版。
现在,我喜欢我的同事,但有时候他们并没有真正关注他们所做的只是git add .
或git commit -a
,其中包括所有更改和当然会通过引用旧的子模块提交来覆盖对子模块的更改。
有没有办法为从这个遥控器拉出的所有人强制执行此子模块更新?这个子模块参考文件可以像普通文件一样对待吗?
或者我是否必须告诉我的同事多加注意并不时做git submodule update
?
我希望我的问题很明确。如果没有,请询问,我会尝试澄清。
答案 0 :(得分:1)
或者我是否必须告诉我的同事更多关注并不时更新git子模块?
理想情况下,这就是他们所做的。如果他们不这样做,你可以尝试添加一个git-hook,在它们拉出后运行git submodule update
。
This问题可能有所帮助。
答案 1 :(得分:1)
没有一个直接的解决方案,因为拉动后需要进行子模块更新。你可以做的一件事就是解决这个问题,你可以创建和分发一个拉动和子模块更新的别名,例如:
git config alias.pullAndUpdate '!git pull && git submodule update'
使用此别名将从远程拉出并在一个命令中更新子模块而不是两个。