如何使用git子树添加本地repo?

Tho*_*ang 6 git git-subtree

假设我有一个已经是 git repo“sub”的目录,现在我希望它成为我新创建的超级目录“sup”的子树。

我已经搜索了文档,但所有教程都是关于添加远程存储库或从现有提交中拆分。如何将现有的 git 存储库添加到主 git 存储库?

使用git subtree add --prefix=sub sub会给出警告子已经存在。

dmg*_*dmg 5

有两种方法可以实现此目的,具体取决于您的期望。

  1. 添加子存储库作为子模块。回购保持独立
  2. 添加子存储库作为该子存储库的子树。它的历史被合并

对于 1,您想使用 git 子模块。具体来说,

在你的sup目录(已经用git init初始化)中运行:

git submodule add location-of-sub
Run Code Online (Sandbox Code Playgroud)

它将把子存储库克隆到超级存储库中。如果子存储库位于其他位置,您可以将其删除。

请注意,子模块仍然充当与顶级存储库不同的存储库。

请参阅子模块的文档:

https://git-scm.com/book/en/v2/Git-Tools-Submodules


对于2来说,情况有点复杂。

首先,获取其他存储库的提交:

# add remote
git remote add sub <locationofsubrepo>
# fetch commits
git fetch
# create local branch with sub
git checkout -b sub_branch sub/master
# switch to master
git checkout master
# now, merge commit as a subdirectory
git read-tree --prefix=sub/ -u sub_branch
Run Code Online (Sandbox Code Playgroud)

以后你可以继续从 sub 中拉取,它会合并到 super 中