2011-03-11 82 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使用,可以幫助自動解決補丁和「目標」文件之間的一些衝突。