2011-03-11 78 views
6

我正在尝试使用git format-patch从一个回购库创建补丁并将其应用到另一个回购库。令我吃惊的是,尽管这两个文件差异很大,但它仍然奏效。有人可以解释技术人员如何处理应用修补程序?显然,它不仅仅使用行号,所以如果有人能指出我的方向真的很棒。Git/Diff修补程序技术说明

+0

你可以看看代码。 – Dipstick 2011-03-11 00:44:44

+0

代码只有行号范围,带有+和 - 行可以删除和添加。 – David 2011-03-11 02:02:56

回答

8

有两种主要方式补丁可以应用到修改的文件:

  • 3路合并基于GIT中的“索引”
  • 线

    • 匹配未修饰(“上下文”)和前修改线

    上下文线(由单个空间,而不是一个或+前面-)是unified diff格式在其GIT中的差异格式在很大程度上是基于的一部分。它们是额外的行,它们在“原始”和“修改”源文件中是相同的,但是围绕着修改过的区域。这些上下文行(以及预修改行(即删除/更改的行))被程序使用,该程序应用diff来查找应该应用每个diff“hunk”的位置,即使目标“target”文件已经插入或在正常目标位置之前移除行(正常位置由行号指定,由于插入/移除行,已在“目标”文件(相对于“原始”文件)中有效地改变了行号)。

    Git的diff格式还包含一个特殊的“索引”行,用于指示“原始”和“修改”文件的对象ID(即缩写为SHA-1哈希)的每个修改文件。如果目标存储库在其对象存储中具有“原始”文件,则可以使用它来准确重构“已修改”文件的内容,然后在文件的三个版本之间执行“原始”,“已修改” (两个源文件)和“目标”(目标文件)。这由git am -3使用,可以帮助自动解决补丁和“目标”文件之间的一些冲突。