2025-01-27 07:00:03

嵌套的Git存储库?

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

 /project_root/
 /project_root/my_project
 /project_root/third_party_git_repository_used_by_my_project

git init/add /project_root是否有意义,以简化本地所有内容的管理,还是我必须分别管理my_project和第三方项目?


当前回答

你可以加上

/project_root/third_party_git_repository_used_by_my_project

to

/project_root/.gitignore

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

但是:如果用户在父repo中运行git clean -dfx,它将删除被忽略的嵌套repo。另一种方法是对文件夹进行符号链接并忽略符号链接。如果你然后运行git clean,符号链接将被移除,但“嵌套”的repo将保持完整,因为它实际上驻留在其他地方。

其他回答

您可能正在寻找称为子模块的Git特性。该特性帮助您管理嵌套在主存储库中的依赖存储库。

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

总结。

我可以嵌套git存储库吗?

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

git init/add /project_root是否有意义,以简化本地所有内容的管理,还是我必须分别管理my_project和第三方项目?

这可能没有意义,因为git具有管理嵌套存储库的特性。Git内建的用于管理嵌套存储库的特性包括子模块和子树。

下面是一个SO问题,涵盖了使用每种方法的利与弊。

将第三方库放置在单独的存储库中,并使用子模块将它们与主项目关联起来。这里是一个演练:Git工具-子模块(Pro Git书籍,第2版)。

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

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

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