diff格式学习
文件比较是最常用的功能了,beyondcompare 一直在用,下面了解一下 git 里面的源码比较
有三种格式:
正常格式(normal diff)
上下文格式(context diff)
合并格式(unified diff)
比较文件
diff -y -W 50 -w --suppress-common-lines ./eostexas.abi ./eostexas.abibak |
“|”表示前后2个文件内容有不同
“<”表示后面文件比前面文件少了1行内容
“>”表示后面文件比前面文件多了1行内容
比较文件夹
diff -Nrq a b |
合并格式的 diff
现在都是这个格式的。 -u 表示 unified
diff -u f1 f2 |
变动的位置用两个@作为起首和结束。
@@ -1,7 +1,7 @@ |
前面的”-1,7”分成三个部分:减号表示第一个文件(即f1),”1”表示第1行,”7”表示连续7行。合在一起,就表示下面是第一个文件从第1行开始的连续7行。同样的,”+1,7”表示变动后,成为第二个文件从第1行开始的连续7行。
创建补丁
diff -ruaN oldfile newfile > patchfile.patch |
-r: 递归遍历子目录
-u: 使用合并格式输出
-a: 将所有文件视为文本文件
-N: 将未出现的文件视为空文件(比较目录时有用)
oldfile及newfile可以是一个目录,配合-r参数使用就会递归比较这两个目录。
合并patch
-p1表示去掉第一层路径分隔符,即./,此时得到的old文件夹位于当前路径中,于是就可以正确的打补丁了。
不用 p1 会提示can't find file to patch at input
patch -p1 < ./commit.diff |