嵌套git库的管理
使用git作为源代码管理时,经常需要在一个git代码库中从外网获取新的git库,也就是在git库下嵌套另外一个git库。而同时维护两个git库的过程就变的非常复杂。
submodule的弊端
常见的做法是使用git 提供的submodule功能。但submodule的管理嵌套git库的结果往往不是我们期望的结果。假设有一个git库叫project,在project的某个子目录下还包含一个叫3rd的目录,是另外一个git库。
D:.
└─project
└─3rd
mytext.txt
假设甲和乙都取了project的代码,由于时间差异,甲通过submodule取到V1版,而乙取到了V2版本。甲乙同时在不同的3rd库下进行开发,势必会造成不同的运行结果。也许你认为可以在获取submodule时指定版本,但这个获取过程很难控制。
一般说来,第三方库应由主程序进行更新及维护,一般情况下,项目没有特殊需求时,不会随便更新第三方库到最新版本,因此submodule更新嵌套的git库并不是理想的解决方案。
嵌套git库的修改可见性
前面的例子中,project git库下的3rd的git库中如果有文件发生修改,此时在project目录下,使用sourceTree等git管理工具无法识别3rd下的文件修改。
也就是说,无法将3rd下的修改提交到project的git库中。
终极解决方案
此时,将3rd目录下的.git目录暂时移出project和3rd目录,此时,在project目录用sourceTree查看时,将可以看到3rd下的文件修改,提交修改到project库中。再将刚移出去的3rd的.git目录移回3rd目录下,在3rd目录下使用git status,将可看到3rd目录的修改,提交时,会将修改提交到3rd目录。