我们有一个git存储库ProjA
,其插件存储在/plugins/foo
中。
完成此项目后,启动了第二个存储库ProjB
。沿着foo的某个地方就像这样添加到了回购
cp ../ProjA/plugins/foo plugins/foo
git add .
git commit -m "Added Foo Plugin"
紧接着
git mv plugins/foo plugins/foobar
git commit -m "Fixed naming conflict with Foo"
然后完成了一堆工作。
如果ProjB/plugins/foobar
中没有任何其他更改,我如何将所有更改(更重要的是历史记录)合并到ProjA/plugins/foo
到ProjB/
?
我尝试过创建一个子树并将其合并,但所有更改都在/
中,并且没有共同的祖先可以合并。
然后我尝试使用git format-patch
,但我无法解决如何使其仅适用于子目录。
我最好的猜测是以某种方式结合这两个动作,但我不知道如何处理这些路径。
答案 0 :(得分:0)
我设法使用--src-prefix
上的--dst-prefix
和git format-patch
对路径进行整理。
有一些涉及合并的问题,我必须在导入的200多次提交过程中手动整理,但除此之外似乎已经有效。
我的最终工作流程是这样的:
cd ProjB
git subtree split --prefix=plugins --branch=plugins-only
mkdir ../ProjBPlugins
cd ../ProjBPlugins
git init .
git pull ../ProjB plugins-only
git format-patch --stdout --src-prefix=a/plugins/ --dst-prefix=b/plugins/ e2f0732f92078a83fd210d415b659b41817a865f > foo.patch
cp foo.patch ../ProjA/
cd ../ProjA
git am foo.patch