嵌套的Git仓库?

zy1mlcev  于 2023-03-21  发布在  Git
关注(0)|答案(7)|浏览(301)

我可以嵌套Git仓库吗?我有:

/project_root/
 /project_root/my_project
 /project_root/third_party_git_repository_used_by_my_project

使用git init/add/project_root来简化本地管理是否有意义,或者我必须单独管理my_project和第三方?

oknwwptz

oknwwptz1#

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

3mpgtkmj

3mpgtkmj2#

将您的第三方库放在一个单独的存储库中,并使用子模块将它们与主项目相关联。下面是一个演练:Git Tools - Submodules(Pro Git book,2nd.)
在决定如何分割一个repo时,我通常会根据我修改它们的频率来决定。如果它是一个第三方库,并且你对它所做的更改只是升级到一个新版本,那么你绝对应该将它从主项目中分离出来。

ee7vknir

ee7vknir3#

为了完整起见:
还有一个解决方案,我建议:subtree merging .
与子模块相比,它更容易维护。你可以用正常的方式创建每个仓库。在主仓库中,你想合并另一个仓库的主仓库(或任何其他分支)到主目录的一个目录中。

$ git remote add -f ThirdPartyGitRepo /project_root/
$ git merge -s ours --no-commit ThirdPartyGitRepo/master
$ git read-tree --prefix=third_party_git_repository_used_by_my_project/ -u ThirdPartyGitRepo/master
$ git commit -m "Merge ThirdPartyGitRepo project as our subdirectory"`

然后,为了将另一个仓库拉到你的目录中(以更新它),使用子树合并策略:

$ git pull -s subtree ThirdPartyGitRepo master

我用这个方法已经很多年了,它很有效:-)
关于这种方式的更多信息,包括与子模块的比较,可以在这个git howto doc中找到。

niwlg2el

niwlg2el4#

你可以加上

/project_root/third_party_git_repository_used_by_my_project

/project_root/.gitignore

这应该可以防止嵌套的repo被包含在父repo中,并且您可以独立地使用它们。
但是:如果用户在父仓库中运行git clean -dfx,它会删除被忽略的嵌套仓库。另一种方法是符号链接文件夹并忽略符号链接。如果您随后运行git clean,符号链接会被删除,但'嵌套'仓库将保持不变,因为它实际上驻留在其他地方。

tv6aics1

tv6aics15#

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

qfe3c7zg

qfe3c7zg6#

总结。
我可以嵌套git仓库吗?
是的,但是默认情况下,git不会跟踪嵌套仓库的.git文件夹,Git有一些专门用来管理嵌套仓库的特性(请继续阅读)。
git init/add/project_root是否有意义,以简化本地管理,或者我必须单独管理my_project和第三方项目?
这可能没有意义,因为git有管理嵌套仓库的功能。Git内置的管理嵌套仓库的功能是submodulesubtree
这里是a SO question,它涵盖了使用每一个的优点和缺点。

ojsjcaue

ojsjcaue7#

我会为每个项目使用一个仓库,这样,历史就更容易浏览了。
我也会检查我正在使用的第三方库的版本,进入使用它的项目的存储库。

相关问题