如何使用git子树包含另一个git存储库的一部分并在两个方向上合并更新

kiy*_*iyo 13 git github git-merge git-subtree

我有两个git存储库显示如下.第一个结构就像一个典型的python项目.

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

bar/
    .git/
Run Code Online (Sandbox Code Playgroud)

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

初始设置不是太糟糕.从foo/我使用的目录:

git subtree --prefix=foo/ split -b export
Run Code Online (Sandbox Code Playgroud)

然后我在foo_repo中有一个新的分支,只有foo_repo/foo/目录的内容.为了把它带到酒吧,我只是去bar/目录和:

git subtree --prefix=foo/ add ../foo_repo/.git export
Run Code Online (Sandbox Code Playgroud)

既然我已经完成了设置,我想做一些代码开发并foo/在两个repos中保持最新.从酒吧推出我想我已经想通了.来自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
Run Code Online (Sandbox Code Playgroud)

然后从foo_repo/目录:

git checkout master
git subtree --prefix=foo/ merge export
Run Code Online (Sandbox Code Playgroud)

合并另一种方式是我被困住的地方.来自foo_repo/:

git checkout master
touch foo/yet_more_code.py
git add foo/yet_more_code.py
git commit -m "yet more code"
???
Run Code Online (Sandbox Code Playgroud)

其中???是将foo/目录与export分支合并的命令.然后从bar/:

git subtree --prefix=foo/ pull ../foo_repo/.git export
Run Code Online (Sandbox Code Playgroud)

所以我基本上都在寻找???现场的线路,或者同样的工作流程.我试过重复git subtree --prefix=foo/ split -b export_foo,这是行不通的.

Lop*_*Sae 1

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

git subtree --prefix=foo/ split
Run Code Online (Sandbox Code Playgroud)

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