0
所以,我一直在学习更多关于git子模块的知识,而且我读过的每个地方都告诉我,在添加子模块之后,我会得到一个分离的HEAD。这是有道理的,因为我希望我的超级项目明确知道应该使用哪个提交。但是,这不是我在实践中看到的(在Mac OS X上)。git submodules and detached HEAD
请考虑以下一系列命令,它们创建一个包含单个文件的快速回购(称为“子”),然后将其作为子模块添加到另一个称为“等值”的回购。
/tmp> git version
git version 1.7.12.4 (Apple Git-37)
/tmp> git init sub
Initialized empty Git repository in /private/tmp/sub/.git/
/tmp> cd sub
/tmp/sub> touch a.txt
/tmp/sub> git add a.txt
/tmp/sub> git commit -m "add a file"
[master (root-commit) c527790] .
0 files changed
create mode 100644 a.txt
/tmp/sub> cd ..
/tmp> git init blah
Initialized empty Git repository in /private/tmp/blah/.git/
/tmp> cd blah
/tmp/blah> git submodule add /tmp/sub sub
Cloning into 'sub'...
done.
/tmp/blah> cd sub
/tmp/blah/sub> git status
# On branch master
nothing to commit (working directory clean)
为什么主分支上的子模块?我希望它能说它不在分支上。多一点挖掘表明,git引用了正确的提交散列,但以某种方式在主分支上,而不是分离的HEAD。
/tmp/blah/sub> cd ../../sub
/tmp/sub> git reflog
97b97b3 [email protected]{0}: commit (initial): add a file
/tmp/sub> cd ../blah
/tmp/blah> git submodule status
97b97b349cfae8da490c2cad3b3f4fc3af6a53c7 sub (heads/master)
我错过了什么?非常感谢。
啊哈...我现在看到了。我没有意识到最初的'git submodule add'离开我的本地仓库的状态不同于后来被克隆的状态。 我用我克隆我的回购的方式做了一些更多的测试,现在我可以看到它是**检查出分离HEAD的子模块(这是有道理的)。 – 2013-03-13 18:50:11