cat writebug.cn/history

一个开发者的技术博客。

diff和patch命令以及git patch相关操作

diff命令

-行数  指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。
-a 所有的文件都视为文本文件来逐行比较, 包括二进制文件。
-b或--ignore-space-change  不检查空格字符的不同。
-B或--ignore-blank-lines  不检查空白行。
-N或--new-file 将缺失的文件当作空白文件处理
-p  若比较的文件为C语言的程序码文件时,显示差异所在的函数名称。
-q或--brief  仅显示有无差异,不显示详细的信息。
-r或--recursive 递归处理目录
-s或--report-identical-files  若没有发现任何差异,仍然显示信息。
-u,-U或--unified=  unified模式输出。
-w或--ignore-all-space  忽略全部的空格字符。

创建patch 使用diff -Naur old new > patchfile.patch

patch命令

patch 是一个可以将 diff 生成的补丁应用到源文件,生成一个打过补丁版本的文件。

常用参数:

-i 指定补丁文件
-pNum 剥离文件名中的前num个目录成分.总的来说,从路径最开始删除路径分隔符(/)及其之前的所有字符,每次加1,直到剩下的部分存在于当前工作目录中,最后得到的就是p级别。
-E 删除应用补丁后为空文件的文件
-o 输出到一个文件而不是直接覆盖文件

patch < patchfile 应用补丁
patch -R < test.patch 撤销补丁

git diff -p > file.patch # git生成patch

git应用patch

  1. git apply --stat file.patch 检查patch文件
  2. git apply --check file.patch 检查是否能应用成功
  3. git apply xxx.patch 打补丁