使用git子模块比在另一个带有gitignore的repo中使用repo有什么好处?

Doo*_*taz 9 git github git-submodules

我们一直在研究git子模块,我们想知道使用子模块的存储库有什么优势(如果有的话),在另一个存储库中有一个带有.gitignore文件的存储库.

没有子模块的示例:

mkdir a
cd a
git init
touch test1.txt
echo "b" > .gitignore
git add .
git commit -m "Adding test1.txt and gitignore"

mkdir b
cd b
git init
touch test2.txt
git add .
git commit -m "Adding test2.txt"

git log
cd ..
git log
Run Code Online (Sandbox Code Playgroud)

AlB*_*lue 16

子代(子模块)的git父级将在提交时跟踪子模块的分支和标记ID.这将确保当您签出父级(在已知版本)时,子模块也将包含其正确的标签.

如果,如上所述,它恰好是一个被忽略的子目录,那么基本上这些是两个独立的git repos,就好像它们不是文件系统层次结构的一部分一样.

  • 这正是关键的区别:使用子模块,您在父存储库中有一个代表子模块的版本化对象.嵌套(和忽略的)子存储库在父存储库中根本没有任何表示. (2认同)