我有两个 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
,但是没有成功。
git subtree pull
时,这对于除了微不足道的合并之外的所有内容都失败了。即使是快进合并也会失败。在bar
存储库中,子树历史记录似乎已经丢失了。 - kiyo