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
,这是行不通的.
如果再次拆分,foo/
为此子树创建的新提交将创建在 中已存在的旧提交之上export
,包括所需的合并:
git subtree --prefix=foo/ split
Run Code Online (Sandbox Code Playgroud)
请注意,如果使用该-b
选项,则分支以前不应存在,因此您可能需要创建一个新分支或稍后强制其更改。