我试图实现的事情本来应该很简单,但却变成了一条兔子洞,我认为肯定有更好的方法。
假设你有两个连续的补丁文件(表示顺序更改),但你没有源文件本身。
如何将这两个补丁组合成一个单独的补丁,以表示组合后的更改集。将组合后的补丁应用于源文件的结果应与按顺序应用两个补丁的结果相同。所有上下文都应被保留。
是否有已知的算法可以解决这个问题?
例如,取这两个补丁:
@@ -1,1 +1,2 @@
+ add this first line
this line is just context
@@ -1,2 +1,2 @@
- add this first line
+ change the first line
this line is just context
@@ -7,2 +7,2 @@
context
- change this line
+ to this one
more context
结果将会是:
@@ -1,1 +1,2 @@
+ change the first line
this line is just context
@@ -7,2 +7,2 @@
context
- change this line
+ to this one
more context
我找到了唯一一个适用于这种情况的工具/库,但在测试中发现它存在不少缺陷,并且代码过于密集,以至于我无法弄清楚底层算法是什么:
https://github.com/twaugh/patchutils
1 .. n
个补丁影响的行上,第n+1
个补丁应该具有与这些行完全匹配的上下文(行号和行内容)。 - LeGEC