patch命令

网上一些讲patch 命令的,都感觉看起来十分绕脑。

我写个我感觉简单的吧。

1.首先单文件,后面就知道了,一个目录其实就是许多文件的批处理方式。

diff 1.txt 2.txt > 1_2.patch //创建从1到2的补丁。这个补丁给1.txt打上,就能让1.txt变成2.txt。
patch 1.txt 1_2.patch //这样就打上了,也就让1.txt变成了2.txt。

2.目录补丁,这个就要讲到那个-p选项。
先来讲一讲对目录打补丁的步骤:[假想有一个当前目录,你在这个目录里工作,这个目录起个名字叫做DIR]
---创建补丁
mkdir test1 test2
echo "aaa" > ./test1/1.txt
echo "bbb" > ./test2/1.txt
这就准备了试验用的目录以及里面的文件。
diff -urN test1 test2 > test1_test2.patch //-urN的意思自行查询吧。
这就创建了从test1到test2的补丁,这个补丁给test1这个目录打上,就能让test1目录下的文件跟test2目录下的文件完全一致了。
---观察补丁
cat test1_test2.patch
结果是:
diff -urN test1/1.txt test2/1.txt
--- test1/1.txt 2015-07-11 00:25:16.122005232 -0700
+++ test2/1.txt 2015-07-11 00:25:22.096005349 -0700
@@ -1 +1 @@
-aaa
+bbb
作为这个补丁,假如它有思想,它知道什么呢?
1.它不知道自己在哪个目录下被生成,在本例中,这个目录其实叫做DIR。
2.它知道在它被生成的这个目录下,有两个目录test1和test2.
3.它还知道分别有1.txt在这两个目录下,它们的内容还不一样,而这个补丁精确记载了不同的地方。
---使用这个补丁,假如你的朋友现在正有一个test1目录,而你告诉他,test1已经过时了,我把补丁给你,你赶紧升级吧。
--作为这个补丁的使用者的你的朋友,他可以把这个补丁放在任何一个他可以找的到的目录下(假设放在$PATCHDIR),这没什么关系。他只要知道,这个补丁记载了什么样的目录信息,见上面三点,而最重要的一点就是第2点,补丁中的证据就是:
diff -urN test1/1.txt test2/1.txt//这就是他需要在使用这个补丁前看的东西。
--这个时候,他正进到了一个目录,这个目录下,就有那个老掉牙的test1目录,注意了,他现在没有进去test1,而只是待在这个上层目录中。这个时候,他应该这么做
patch -p0 < $PATCHDIR/test1_test2.patch
这就行了。。
--解释。
1.为啥没有指定我要打补丁的目录?
因为补丁里已经记录了这个目录就是 test1
2.-p0是啥意思?
可以这么理解,当敲下这个patch命令的时候,程序就会test1_test2.patch去里找他要打补丁的文件(其实就是找到文件,对文件打补丁),而test1_test2.patch里确实记载了这个文件,也就是test1/1.txt。这个时候,就应该明朗了,这个目录是个相对路径,相对哪个呢,就是相对$CURRENT(当前目录),也就是你敲下patch命令的这个目录,也就是说,程序去找$CURRENT/test1/1.txt, 然后根据test1_test2.patch中的信息,更新这个1.txt。
先说-p1,再说-p0。如果,你的朋友敲下的是-p1,那么根据上面的解释,程序就会找$CURRENT/1.txt,然后更新这个文件。然而,$CURRENT下并没有这个文件。-p,就是消除补丁文件中,关于路径信息的,斜杠以及前面的部分。 diff -urN test1/1.txt test2/1.txt ,斜杠以及前面的部分用双引号标志一下:“ test1/”,把这个消掉。-p1就是消掉一个斜杠以及前面的,-p2就是消掉两个斜杠以及前面的。-p0就是不消掉任何路径信息。
3.如果你的朋友并没有只是待在这个$CURRENT目录下,他进到了test1里面去了,这个时候还是可以打补丁。利用-p。利用前面的解释,这个时候-p1就对了。
好的,程序的过程是:去找($CURRENT)/ test1/1.txt,这个文件,并更新。这并不对,我们敲了-p1,就变成了,去找($CURRENT )/1.txt,并更新。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值