嵌套Git存储库?

嵌套Git存储库?,git,Git,我可以嵌套Git存储库吗?我有: /project_root/ /project_root/my_project /project_root/third_party_git_repository_used_by_my_project git init/addproject\u root以简化本地所有内容的管理,还是我必须分别管理my\u project和第三方项目?我会为每个项目使用一个存储库。这样,历史就更容易浏览了 我还会将我正在使用的第三方库的版本检查到使用它的项目的存储库中。您可

我可以嵌套Git存储库吗?我有:

 /project_root/
 /project_root/my_project
 /project_root/third_party_git_repository_used_by_my_project

git init/add
project\u root以简化本地所有内容的管理,还是我必须分别管理
my\u project
和第三方项目?

我会为每个项目使用一个存储库。这样,历史就更容易浏览了


我还会将我正在使用的第三方库的版本检查到使用它的项目的存储库中。

您可能正在寻找名为的Git功能。此功能可帮助您管理嵌套在主存储库中的依赖存储库。

将第三方库放置在单独的存储库中,并使用子模块将它们与主项目关联。这是一个演练:(专业Git书籍,第2页)

在决定如何分割回购时,我通常会根据修改回购的频率来决定。如果它是一个第三方库,并且只有您对它所做的更改是升级到新版本,那么您必须将它与主项目分开。

将帮助您在一个树中处理多个项目,并为它们保留可分离的历史记录。

仅为完整起见:

我建议还有另一个解决方案:

与子模块相比,它更易于维护。 您可以按常规方式创建每个存储库。 在主存储库中时,您希望将另一存储库的主存储库(或任何其他分支)合并到主目录的目录中

$ git remote add -f OtherRepository /path/to/that/repo
$ git merge -s ours --no-commit OtherRepository/master
$ git read-tree --prefix=AnyDirectoryToPutItIn/ -u OtherRepository/master
$ git commit -m "Merge OtherRepository project as our subdirectory"`
然后,为了将另一个存储库拉入您的目录(以更新它),请使用子树合并策略:

$ git pull -s subtree OtherRepository master
我使用这种方法已经很多年了,它很有效:-)

关于这种方法的更多信息,包括与子模块的比较,可以在这个git中找到。

您可以添加

/project_root/third_party_git_repository_used_by_my_project

这将防止嵌套回购包含在父回购中,并且您可以独立使用它们

但是:如果用户在父repo中运行gitclean-dfx,它将删除被忽略的嵌套repo。另一种方法是对文件夹进行符号链接并忽略符号链接。如果随后运行git clean,符号链接将被删除,但“嵌套”repo将保持不变,因为它实际上位于其他位置。

摘要

我可以嵌套git存储库吗

对。但是,默认情况下,git不会跟踪嵌套存储库的
.git
文件夹。Git具有设计用于管理嵌套存储库的功能(请继续阅读)

git init/添加/project\u root以简化本地所有内容的管理,还是我必须单独管理我的\u项目和第三方项目

这可能没有意义,因为git具有管理嵌套存储库的功能。Git管理嵌套存储库的内置功能是和


这里是,这里是,涵盖了使用每种方法的优点和缺点。

chrisjean.com的博客似乎不是最新的,因为它只是试图遵循它。格雷格的维基帖子可能有点复杂,但作为一个git新手,我更喜欢准确而不是简单…博客现在似乎运行良好,不幸的是,对sage来说,34票(现在35票)的评论似乎同意博客文章有价值。事实证明,您不必为了清晰性和特定于操作的建议而牺牲准确性。在阅读之后,我会想象作者已经研究了一些,并且可能阅读了实际的,而不仅仅是kernel.org的wiki页面。博客作者在一个完全情境化的例子中对Git的解释似乎对很多人都很有帮助……顺便说一句,上面提到的chrisjean link已经死了。更新的链接是,此功能随后已合并到Git中。这里有一个很好的描述:将引用合并到git书中的子树不再有效。目前,这似乎是一个链接:May希望将“s”添加到链接上的“https”以实现安全连接。@nom nom Done。该链接已更新为“https”。
/project_root/.gitignore