Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git/Diff补丁技术说明_Git_Diff_Patch - Fatal编程技术网

Git/Diff补丁技术说明

Git/Diff补丁技术说明,git,diff,patch,Git,Diff,Patch,我正在尝试使用git格式的补丁从一个回购协议创建补丁,并将其应用到另一个回购协议。令我惊讶的是,尽管这两个文件差别极大,但它仍然有效。有人能解释一下git如何处理应用补丁的技术吗?显然,它不只是使用行号,所以如果有人能给我指出正确的方向,那就太棒了 有两种主要方法可以将修补程序应用于修改过的文件: 匹配未修改的(“上下文”)行和修改前的行 基于Git“索引”行的3路合并 上下文行(前面有一个空格,而不是+或-)是Git的diff格式主要基于的格式的一部分。它们是额外的行,在“原始”和“修改”

我正在尝试使用git格式的补丁从一个回购协议创建补丁,并将其应用到另一个回购协议。令我惊讶的是,尽管这两个文件差别极大,但它仍然有效。有人能解释一下git如何处理应用补丁的技术吗?显然,它不只是使用行号,所以如果有人能给我指出正确的方向,那就太棒了

有两种主要方法可以将修补程序应用于修改过的文件:

  • 匹配未修改的(“上下文”)行和修改前的行
  • 基于Git“索引”行的3路合并
上下文行(前面有一个空格,而不是
+
-
)是Git的diff格式主要基于的格式的一部分。它们是额外的行,在“原始”和“修改”源文件中相同,但环绕修改区域。这些上下文行(以及修改前的行(即删除/更改的行))由应用差异的程序使用,以查找每个差异“块”应应用的位置,即使目标“目标”文件已在正常目标位置之前插入或删除行(正常位置由行号指定,由于插入/删除了行,行号在“目标”文件(相对于“原始”文件)中已有效更改)


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

您可以只查看代码。代码的行号范围只有+行和-行,可以删除和添加。