如何使用 git 子树添加本地仓库?
How to use git subtree to add local repo?
假设我有一个已经是 git 存储库 "sub" 的目录,现在我希望它成为我新创建的超级目录 "sup".[=12= 的子树]
我搜索了文档,但所有教程都是关于添加远程仓库或从现有提交中拆分出来的。如何将现有的 git 存储库添加到主 git 存储库?
使用git subtree add --prefix=sub sub
会给出子已经存在的警告。
有两种方法可以做到这一点,具体取决于您的期望。
- 将子仓库添加为子模块。回购协议保持独立
- 添加子仓库作为这个子仓库的子树。它的历史合并
对于 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
假设我有一个已经是 git 存储库 "sub" 的目录,现在我希望它成为我新创建的超级目录 "sup".[=12= 的子树]
我搜索了文档,但所有教程都是关于添加远程仓库或从现有提交中拆分出来的。如何将现有的 git 存储库添加到主 git 存储库?
使用git subtree add --prefix=sub sub
会给出子已经存在的警告。
有两种方法可以做到这一点,具体取决于您的期望。
- 将子仓库添加为子模块。回购协议保持独立
- 添加子仓库作为这个子仓库的子树。它的历史合并
对于 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