如何使分离的HEAD的子模块连接到实际的HEAD上?

当我像这样将Git子模块添加到Git存储库时,

git submodule add ssh://server/proj1/ proj1
git submodule init
git submodule update

添加的子模块将处于分离的HEAD模式。 我不太清楚那是什么,但我知道子模块将被链接到目标存储库的特定版本。

我不知道它是如何工作的,无论如何它看起来像一个代理分支存在那里。 我通过切换到主分支来解决这个问题。

cd proj1
git checkout master

这将切换当前分支的实际主控HEAD,但是这不会更新联动。 因此,如果您再次克隆整个存储库,它仍将链接到旧版本。

如果我想使它与最新版本(HEAD)始终保持关联,我该怎么做?


2013年3月更新

Git 1.8.2增加了跟踪分支的可能性。

git submodule ”开始学习一种新的模式,以便与远程分支的提示集成 (而不是与超级项目的gitlink中记录的提交进行集成)。

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

另请参阅Vogella关于子模块的教程。


原始答案(2011年12月)

添加的子模块将处于分离的HEAD模式

是的,子模块是关于引用特定的提交,而不是分支。
所以:

  • 如果您签出提交SHA1(或标签),则您处于分离的HEAD模式。
  • 如果你签出一个分支(就像你使用子模块的master分支一样),你可以在该分支的顶部创建其他提交(但是你必须回到父代码库以便提交父代以及给你)需要记录您创建的新子模块提交)
  • 有关更多信息,请参阅“子模块的真实性质”。

    如果你总是想要另一个repo的最新提交,最简单的方法是将它们合并在一起(例如与子树合并)。
    有关详细信息和参考资料,请参见“合并2个相同的存储库GIT”。

    链接地址: http://www.djcxy.com/p/23617.html

    上一篇: How to make submodule with detached HEAD to be attached to actual HEAD?

    下一篇: cannot push to github: everything up