13

我在下面显示了两个 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,我只需转到bar/目录并:

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

现在我已经准备好了,我想做一些代码开发并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

然后从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/exportbar/

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

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

4

1 回答 1

1

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

git subtree --prefix=foo/ split

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

于 2013-09-20T20:57:06.880 回答