【问题标题】:How to use git subtree to add local repo?如何使用 git subtree 添加本地仓库?
【发布时间】:2016-06-12 13:59:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: git git-subtree


    【解决方案1】:

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

    1. 将子存储库添加为子模块。存储库保持独立
    2. 将子存储库添加为此子存储库的子树。它的历史合并了

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

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

    git 子模块添加子位置

    它会将 sub repo 克隆到 sup repo 中。然后,如果它位于其他地方,您可以将其删除。

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

    查看子模块的文档:

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

    对于 2,它有点复杂。

    首先你获取另一个 repo 的提交: # add remote git remote add sub # 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 中

    --dmg

    【讨论】:

    • 'git remote add sub sub'; 'git 获取子'。然后必须删除本地目录子。另外,如果要保留 git 日志,我想我应该使用 'git merge -s ours --no-commit'
    • 阅读了许多赞美 subtreessubmodules 优点的文章,但最终我浪费了很多时间尝试采用 convul​​ated v1 书中描述的范式。 v2 书模糊地提到了复杂性,但没有描述问题 - 将合并的更改从 master 的子树推送到分支将导致分支的上游 repo 具有来自本地存储库,包括 master 引用的内容。
    猜你喜欢
    • 2014-07-19
    • 2021-04-07
    • 1970-01-01
    • 2016-10-09
    • 2016-09-13
    • 2011-10-06
    • 1970-01-01
    相关资源
    最近更新 更多