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

15

我有两个 git 代码仓库,如下所示。第一个结构类似于典型的 Python 项目。

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

bar/
    .git/

我想在bar/中作为一个子树包含foo_repo/foo/目录,并且我希望能够同时从foo_repo存储库到bar和相反方向合并对foo_repo/foo/some_code.py的更新。
最初的设置并不太麻烦。我使用以下命令从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/同步更新。我认为我已经弄清楚了从bar进行推送的方法。从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个回答

1
如果您再次分割foo/,则为此子树创建的新提交将建立在已存在于export中的旧提交之上,包括所需的合并。
git subtree --prefix=foo/ split

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

当我执行最终的 git subtree pull 时,这对于除了微不足道的合并之外的所有内容都失败了。即使是快进合并也会失败。在 bar 存储库中,子树历史记录似乎已经丢失了。 - kiyo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接