Octopus合并使用补丁文件?

时间:2014-08-20 15:41:39

标签: git diff patch

我刚学会了如何在GitHub中进行章鱼合并。

我正在使用一个系统,我们使用共同的祖先创建补丁拼凑而成的系统。我们会调用共同的祖先 VersionA 。 VersionB和VersionC是从VersionA分支和修改的。我想得到两个补丁:VersionAB和VersionAC。

使用git,我可以做一个

git branch 3Way VersionA
git checkout 3Way
git merge VersionB and VersionC

给了我一个VersionABC

只要正确设置了共同的祖先,就会使用git <<<<====以及>>>>方法自动合并生成的文件。

有没有办法可以应用相同的设置/逻辑但使用补丁文件?我想我可以从git&#39; octopusmerge&#39;中获取补丁文件,但是我得到mods的octopusmerge的唯一方法是通过git。有没有办法使用分支的源文件到达VersionABC,然后尝试从补丁文件派生VersionABC?

我们希望包含一个工具,用于处理原始数据,从各种modA中提取补丁文件差异,然后以某种方式将这些补丁文件组合起来,以便我们能够实现VersionABC。

我得到的最贴的答案是interdiff,但如果这是我的答案。如何设置我的环境(又名,步骤和步骤,以及以何种方式运行补丁和interdiff命令?)

1 个答案:

答案 0 :(得分:1)

该命令是:

git apply --3way patchfile1.patch patchfile2.patch...

当git导出包含git diff something..HEAD的补丁文件时,它会记录something的修订版。此修订版是共同祖先git apply --3way查看记录的修订版,并与当前的HEAD,共同的祖先以及修补程序应用于共同祖先时创建的新HEAD进行三向合并。 / p>

对于命令行中列出的每个补丁文件,都会执行此过程。

如果你想在没有git的情况下这样做,那就更难了。由于在没有VCS的情况下没有广为人知的方法可以做到这一点。显而易见的方法就是使用章鱼合并:

cat patchfile1.patch patchfile2.patch... | patch --merge -p1

否则,3路合并可能需要每个版本的源目录,然后是shell脚本:

mkdir VersionABC
for i in (cd VersionA && ls -R); do
  if [ -f VersionA/$i ]; then
    diff3 --merge VersionB/$i VersionA/$i VersionC/$i > VersionABC/$i
  else
    mkdir -p VersionABC/$i
  fi
done