在git submodule update
之后,它总是检出同一个提交。例如34561
。
我为子模块执行git checkout master
,然后git submodule sync
。然后它指向最新的提交a2344
。
但在update
之后,它再次指向提交34561
。
如何改变?我的意思是为什么它决定指向那个提交而不是另一个?
答案 0 :(得分:2)
我的意思是为什么它决定指向那个提交而不是另一个?
因为子模块总是在父仓库中将固定的SHA1提交记录为 gitlink ( special entry in the index )。
这就是为什么子模块总是恢复为detached HEAD branch
您可以配置子模块以跟随分支
cd /path/to/your/parent/repo
git config -f .gitmodules submodule.<path>.branch <branch>
子模块仍将恢复为固定提交,但可以使用以下命令进行更新:
git submodule update --remote
确保在父仓库中添加并提交新的gitlink (因为将子模块更新到最新的分支会更改其SHA1,在父仓库中记录为gitlink)。登记/>
如果你不这样做,你会发现你的子模块在接下来的git submodule update --init
处恢复到以前的状态。
请参阅&#34; Git submodules: Specify a branch/tag&#34;。
答案 1 :(得分:1)
&#39;主要&#39; project包含对每个子模块的签出版本的SHA-1的引用。这是主项目中提交的一部分。
如果在子模块中手动更改子模块的头部,则需要告诉主项目从现在起它应该将此SHA-1用于子模块。
git commit -a
将执行此操作,因为主项目将看到子模块头已更新。
这可能会令人惊讶,但它实际上是一个很好的功能。通过检查主项目中的头部,您基本上可以告诉您的同事现在可以使用更新版本的子模块。这使得人们可以一起工作,而不会有太大的风险将地毯拉到别人的脚下。
(话虽如此,在带有子模块的工作流程中有很多瑕疵,你可能应该同意一种方法,并将其与一些团队脚本相结合以避免陷阱)。
答案 2 :(得分:0)
您需要进入子模块文件夹并执行:
git fetch --all --prune
git pull origin master
现在你将获得submodole中的最新提交
运行fetch后,它会更新子模块下的.git
文件夹,并带有最新的提交。它将确保您有最近的更改。
答案 3 :(得分:0)
您可以执行:
format="flash"
这将更新所有子模块。