将更改合并到另一个存储库中的文件夹

时间:2014-07-07 17:42:09

标签: git merge

我们有一个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/fooProjB/? 我尝试过创建一个子树并将其合并,但所有更改都在/中,并且没有共同的祖先可以合并。
然后我尝试使用git format-patch,但我无法解决如何使其仅适用于子目录。
我最好的猜测是以某种方式结合这两个动作,但我不知道如何处理这些路径。

1 个答案:

答案 0 :(得分:0)

我设法使用--src-prefix上的--dst-prefixgit 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