git submodule update --remote与git pull的区别

72

跑步和慢跑有什么区别?

git submodule update --remote

对比

cd <submodule directoy>
git pull
假设子模块之前被设置为跟踪某个分支:
git submodule add -b master [URL to Git repo]

2
可能会有类似的子模块,但请想象您有5个以上。 - d.raev
1个回答

76

它们的区别在于:

  • git pull 仅会更新你的子模块分支,但可以是你在该子模块存储库中自己检出的任何分支。
  • git submodule update --remote 仅会更新在 .gitmodule 中注册的分支,并且默认情况下,你将会得到一个分离的 HEAD,除非指定 --rebase--merge 或者将键 submodule.$name.update 设置为 rebasemergenone

在两种情况下,你仍然需要返回到父存储库,添加并提交新的子模块 SHA1 引用。
这是因为在两种情况下,子模块的 SHA1 发生了变化,这意味着父存储库中的gitlink特殊条目在索引中,以子模块的根文件夹命名)必须被添加并提交。

git submodule update --init --remote的作用类似于:


1
你能澄清一下你所说的“添加并提交新的子模块SHA1引用”的意思吗? - Doug
3
@Doug 这是因为 gitlink 的缘故:我编辑了回答并添加了链接,这些链接说明了什么是 gitlink。你可以在这里看到一个 gitlink:http://stackoverflow.com/a/9857021/6309 - VonC
这个回答能否更加详细些呢?我在思考 --init 和 --remote 标志之间的区别。 - tortal
2
@tortal 六年后,没问题,我可以扩展那个答案。我已经编辑了那个答案:如果需要更多细节,请告诉我。 - VonC

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