【问题标题】:How to include part of another git repository using git subtree and merge updates in both directions如何使用 git subtree 包含另一个 git 存储库的一部分并双向合并更新
【发布时间】:2013-09-20 00:06:42
【问题描述】:

下面显示了两个 git 存储库。第一个结构类似于典型的 python 项目。

foo_repo/
    .git/
    setup.py
    foo/
         __init__.py
         some_code.py
    tests/

bar/
    .git/

我想将foo_repo/foo/ 目录作为子树包含在bar/ 中,并且我希望能够将对foo_repo/foo/some_code.py 的更新从foo_repo 存储库合并到bar,反之亦然。

初始设置还不错。从我使用的foo/ 目录:

git subtree --prefix=foo/ split -b export

然后我在 foo_repo 中有一个新分支,其中只有 foo_repo/foo/ 目录的内容。要将它带入酒吧,我只需转到bar/ 目录并:

git subtree --prefix=foo/ add ../foo_repo/.git export

现在我已经准备好了,我想做一些代码开发并在两个 repos 中保持foo/ 的最新状态。从酒吧推我想我已经想通了。来自bar/目录:

touch foo/more_code.py
git add foo/more_code.py
git commit -m "more code"
git subtree --prefix=foo/ push ../foo_repo/.git export

然后从foo_repo/目录:

git checkout master
git subtree --prefix=foo/ merge export

合并另一种方式是我卡住的地方。来自foo_repo/

git checkout master
touch foo/yet_more_code.py
git add foo/yet_more_code.py
git commit -m "yet more code"
???

其中??? 是将foo/ 目录与export 分支合并的命令。然后来自bar/

git subtree --prefix=foo/ pull ../foo_repo/.git export

所以我基本上是在寻找??? 点中的行,或者做同样事情的不同工作流程。我试过重复git subtree --prefix=foo/ split -b export_foo,但它不起作用。

【问题讨论】:

    标签: git github git-merge git-subtree


    【解决方案1】:

    如果您再次拆分 foo/,为该子树创建的新提交将在 export 中已存在的旧提交之上创建,包括此类所需的合并:

    git subtree --prefix=foo/ split
    

    请注意,如果使用 -b 选项,则该分支以前不应该存在,因此您可能需要创建一个新分支或稍后强制它进行更改。

    【讨论】:

    • 当我最终执行git subtree pull 时,除了简单的合并之外的所有操作都会失败。它甚至无法进行快进合并。不知何故,子树历史似乎已经在 bar 存储库中丢失了。
    猜你喜欢
    • 2019-07-18
    • 2013-02-21
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2023-04-06
    • 2020-12-19
    相关资源
    最近更新 更多