我们有数百个存储库,并定期从上游接收补丁。作业使用git apply --check <patch>
. 如果没有错误,则应用补丁git apply <patch>
并提交更改。如果有任何错误,补丁将被标记为conflict
。然后将错误和冲突的补丁交付给我们的存储库维护人员。它们用于git apply --reject <patch>
应用补丁和解决冲突。
以我之前的理解,git apply --reject
是可靠的。但是,一位维护人员报告说,补丁的应用方式完全错误。一些新行被插入到意外函数中的块中,该函数恰好具有相同的上下文。还有其他一些错误的块。
例如,补丁中的块是
@@ -1757,9 +1757,9 @@ def FunctionAAA()
print('hi')
}
+ print('hello world')
print('good day')
return True
但是在应用的文件中,块是
@@ -1927,9 +1997,9 @@ def FunctionBBB() ---> in another function
print('hi')
}
+ print('hello world')
print('good day')
return True
维护者很可能没有注意到错位的行,这会导致构建错误甚至更严重的隐藏错误。git apply --3way <patch>
尽管仍然存在冲突,但我让维护者尝试并按预期应用了补丁。
我的想法git apply --reject
和git apply --3way
行为不同,因为他们使用不同的算法。从结果来看,我想我们需要采用git apply --3way
. 但我也担心--3way
在某些情况下可能会出乎意料地工作。
为什么git apply --reject
以看似错误的方式工作,而不是将块视为冲突?在我们的情况下哪个更好?有没有更好的解决方案来应用补丁?谢谢。
git version 2.31.1
ubuntu 4.15.0-76-generic