使用git子模块比在另一个带有gitignore的回购中拥有回购有什么优势?

使用git子模块比在另一个带有gitignore的回购中拥有回购有什么优势?,git,github,git-submodules,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 . g

我们一直在研究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
git父级(子模块的)将在您提交时跟踪子模块的分支和标记ID。这将确保当您签出父模块(已知版本)时,子模块也将包含正确的标记


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

这正是关键的区别:使用子模块,父存储库中有一个表示子模块的版本化对象。嵌套(并被忽略)的子存储库在父repo中根本没有表示。嗨,我在理解这一点时遇到了一个问题:假设工作repo是a,子模块repo是b。你的意思是b在A中跟踪对其代码所做的更改吗?你能提供一个例子吗?@adityameon我认为这是一种有组织的方式,可以在每次git pull中执行
git子模块,而不记得我的“子模块”在哪里。@AdityaMP让我们假设你将repo A作为一个web应用程序。A有一个后端B和一个前端F,它们一起工作。现在,假设B有3个版本,F有2个版本:B1和F1一起工作,B2和B3和F2一起工作,B4和F3一起工作。如果只是文件夹,一次提交不能保证兼容版本,但是如果我们使用子模块,那么每次提交都可以链接兼容版本。