我正在使用git子模块:
1)创建MASTER项目git repo,进行一些提交
2)创建SUB项目git repo,进行一些提交
3)使用git子模块功能,将SUB添加到MASTER / somefolder /
4)然后Alice在SUB(分支Alice)上进行2次提交。
5)然后Bob执行2次提交,分支Bob。
6)然后,我通过子模块功能将Alice和Bob的提交添加到SUB和MASTER中。
在此过程中,我有些困惑:
1)在将SUB添加到MASTER中的初始化过程中,MASTER将如何记住在SUB中添加提交?
例如,如果SUB有2个分支,那么在MASTER中会记住哪个分支的提交?
是否使用SUB的master分支?还是使用SUB的HEAD?
如果使用HEAD,那么如果我将HEAD指向SUB的另一个分支(不是master),会发生什么?
2)当我将Alice的2次提交添加到MASTER中时,MASTER将如何知道我要添加Alice的2次提交,而不是Bob的?
据说MASTER不关心SUB的分支,只关心SUB的提交。
这是我对git子模块功能实现的理解:
MASTER只记住一个提交ID,例如abcdefg123456。
然后,如果您执行git submodule update --init --recursive
,MASTER将在abcdefg123456的分支中下载所有提交,直到abcdefg123456提交为止。
对吗?
如果上面的方法正确,那么我很困惑,分支Alice和Bob都添加提交,如果我在Alice中使用abcdefg123456,那么如何添加Bob的提交?
答案 0 :(得分:0)
主git存储库(MASTER)及其子模块(SUB)被视为独立存储库。
您可能已经知道,一旦在任何SUB目录(或子目录)中 cd ,所有git命令都将应用于SUB(并且仅适用于SUB)。然后,如果您
所以您是对的,MASTER唯一要记住的关于SUB的信息是远程地址和单个sha1参考(并且没有分支名称或标记名称)。>