使用git子模块相比于在另一个具有.gitignore的仓库中拥有一个仓库,有哪些优势?

12

我们一直在研究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
1个回答

20

当你提交代码时,git父仓库会跟踪子模块的分支和标签ID。这将确保当你检出父仓库(在已知版本)时,子模块也将包含它们正确的标签。

如果像上面所述,它只是一个被忽略的子目录,那么基本上这是两个独立的git仓库,就好像它们没有属于同一个文件系统层次结构。


2
这正是关键的区别:使用子模块,您在父存储库中拥有一个版本化的对象,代表子模块。嵌套(和被忽略的)子存储库在父存储库中根本没有任何表示。 - Dan Moulding
嗨,我不太理解这个问题:假设工作仓库是A,子模块仓库是b。你的意思是b跟踪在A中对其代码所做的更改吗?能否请您提供一个例子? - Aditya M P
@adityamenon 我认为这是一种有组织的方式,可以在不记得我的“子模块”在哪里的情况下执行git submodule foreach git pull - JRomero
1
@AdityaMP 假设您有一个名为 A 的仓库作为 Web 应用程序。A 有一个后端 B 和一个前端 F,并且它们一起工作。现在,假设 B 有 3 个版本,F 有 2 个版本:B1 与 F1 兼容,B2 和 B3 与 F2 兼容,B4 与 F3 兼容。 如果只是文件夹,单个提交不能保证兼容的版本,但如果我们使用子模块,则每个提交可以链接兼容的版本。 - Smily

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接