簡體   English   中英

Git / Diff Patch技術說明

[英]Git/Diff Patch technical explanation

我正在嘗試使用git format-patch從一個repo創建補丁並將其應用到另一個repo。 令我驚訝的是,即使這兩個文件非常不同,它也能正常工作。 有人可以解釋git如何處理應用補丁的技術問題嗎? 顯然它不只是使用行號,所以如果有人能指出我正確的方向,那將是非常棒的。

補丁可以應用於修改文件的兩種主要方式:

  • 匹配未修改(“上下文”)和預修改行
  • 基於Git的“索引”行的3向合並

上下文行(前面是單個空格而不是+- )是統一diff格式的一部分,Git的diff格式主要基於這種格式。 它們是“原始”和“修改”源文件中相同但在修改后的區域周圍的額外行。 這些上下文行(連同預修改行(即刪除/更改的行))由應用diff的程序使用,以查找應該應用每個diff“hunk”的位置,即使目標“target”文件已經插入或刪除正常目標位置之前的行(正常位置由行號指定,由於插入/刪除行而在“目標”文件(相對於“原始”文件)中有效更改)。

Git的diff格式還為每個修改過的文件包含一個特殊的“索引”行,用於指示“原始”和“已修改”文件的對象ID(即縮寫的SHA-1哈希)。 如果目標存儲庫在其對象存儲庫中具有“原始”文件,則可以使用它來精確地重建“已修改”文件的內容,然后在文件的三個版本之間執行三向合並 :“original”, “已修改”(源文件)和“目標”(目標文件)。 這由git am -3 ,可以幫助自動解決補丁和“目標”文件之間的一些沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM