我刚学会了如何在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
命令?)
答案 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