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

How to use git subtree to add local repo?

假设我有一个已经是 git 存储库 "sub" 的目录,现在我希望它成为我新创建的超级目录 "sup".[=12= 的子树]

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

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

有两种方法可以做到这一点,具体取决于您的期望。

  1. 将子仓库添加为子模块。回购协议保持独立
  2. 添加子仓库作为这个子仓库的子树。它的历史合并

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

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

git submodule add location-of-sub

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

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

查看子模块的文档:

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

以后可以继续从sub拉取,会合并到sup