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

时间:2013-09-20 00:06:42

标签: git github git-merge git-subtree

我有两个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,但这不起作用。

1 个答案:

答案 0 :(得分:1)

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

git subtree --prefix=foo/ split

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