当我发布子模块更新并包含" - no-fetch"像这样:
git submodule update --remote --no-fetch
为了确保当前跟踪分支状态,请更新--remote 在计算之前获取子模块的远程存储库 SHA-1。如果您不想获取,则应使用子模块更新 --remote --no-fetch。
我对" - no-fetch"感到有些困惑。部分。如果我在没有它的情况下调用更新:
git submodule update --remote
我知道不会执行提取 - 但这也意味着我无法保证" 当前跟踪分支状态" ?究竟是什么意思?
在什么情况下我不想保证当前跟踪分支状态?
答案 0 :(得分:0)
git submodule update
在幕后做了几件事。来自git help submodule
:
更新注册的子模块以匹配超级项目 期望通过克隆丢失的子模块,获取丢失的提交 子模块并更新子模块的工作树。
所以运行 git submodule update --remote
大致相当于(在子模块内部):
$ git fetch origin # update remote-tracking branches
$ git checkout origin/HEAD # update working tree
origin/HEAD
是一个远程跟踪分支,它跟随远程存储库中的分支(它通常是隐藏的,但您可以使用 git branch --remotes
看到它)。请注意,git fetch
会引发网络活动,但 git checkout
完全在本地发生。
--no-fetch
跳过第一步,但仍会将您的子模块工作树更新到远程跟踪分支。
我不认为您会更喜欢 --no-fetch
的常见情况,但它可能在连接受限的情况下最有用。例如,在您上飞机之前,您可以git fetch --recurse-submodules
。然后在飞行过程中,您可以使用 git submodule update --remote --no-fetch
(更新到子模块远程跟踪分支)或 git submodule update --no-fetch
(更新到记录在超级项目中的提交)而无需访问网络。但是,这不会具有“当前跟踪分支状态”,因为您的远程跟踪分支只会与您上次获取时一样新。