从一个git仓库迁移到另外一个git仓库 嵌套的git仓库?




从一个git仓库迁移到另外一个git仓库 (5)

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

 /project_root/
 /project_root/my_project
 /project_root/third_party_git_repository_used_by_my_project

git init /添加/ project_root以便轻松管理本地所有内容,还是必须分别管理my_project和第三方?


您可能正在寻找称为submodules的Git功能。 此功能可帮助您管理嵌套在主存储库内的相关存储库。


git-subtree将帮助你在一棵树中处理多个项目为它们保留可分离的历史记录。


你可以添加

/project_root/third_party_git_repository_used_by_my_project

/project_root/.gitignore

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

但是:如果用户在父回购库中运行git clean -dfx,它将删除被忽略的嵌套回购。 另一种方法是将文件夹符号链接并忽略符号链接。 如果你运行git clean,则删除符号链接,但'嵌套'回购将保持不变,因为它确实位于其他地方。


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

我也会检查我正在使用的第三方库的版本,使用它的项目库。


为了完整:

还有另一种解决方案,我会推荐: 子树合并

与子模块相比,它更容易维护。 您将以正常方式创建每个存储库。 在主存储库中,您想要将主存储库的主(或任何其他存储库)合并到主目录的目录中。

$ 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 howto文档中找到





git