linux下patch文件使用

linux下patch文件使用初识patch还是和Z同事沟通问题时认识的,回想起已经近半年

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

    初识patch还是和Z同事沟通问题时认识的,回想起已经近半年。简单来说,打patch是对文件内容增增减减。由陌生到认识到熟悉,是一件愉快的事。

1. 对单个文件打patch

old.txt为原文件,new.txt 为已修改后的文件,现在要做的是:制作patch,更新old.txt文件

(1)查看文件内容

[wln@localhost 02]$ cat old.txt 
123456
qwert
dasfg
fdsaf
[wln@localhost 02]$ cat new.txt 
1123456
qqwert
dasfg
dsaf

(2)制作patch

[wln@localhost 02]$
diff -Naur old.txt new.txt > a.patch 

[wln@localhost 02]$ cat a.patch 

— old.txt     2014-06-09 15:35:34.000000000 +0800

+++ new.txt     2014-06-09 15:35:34.000000000 +0800

@@ -1,4 +1,4 @@

-123456

-qwert

+1123456

+qqwert

 dasfg

-fdsaf

+dsaf

(3)diff参数解读

-N 选项确保补丁文件将正确地处理已经创建或删除文件的情况
-a  将所有文件都当做文本文件
-u 选项以统一格式创建补丁文件,这种格式比缺省格式更紧凑些
-r 是一个递归选项,设置了这个选项,diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件

(4)执行patch

[wln@localhost 02]$ patch -p0 < a.patch 
patching file old.txt

这里 -p0表示执行patch所在的路径就是制作patch所在的路径。如果为-p1表示执行patch所在的路径为制作patch所在路径的子目录下,如果为 -p2 则为子目录的子目录下。

所以最好是在哪里制作在哪里执行patch(用-p0)
[wln@localhost 02]$ cat old.txt 
1123456
qqwert
dasfg
dsaf
[wln@localhost 02]$ cat new.txt 
1123456
qqwert
dasfg
dsaf

(5)打好patch,发现有问题,想返回,则执行-R 

[wln@localhost 02]$ patch -R -p0 < a.patch 
patching file old.txt
[wln@localhost 02]$ cat old.txt 
123456
qwert
dasfg
fdsaf
[wln@localhost 02]$ cat new.txt 
1123456
qqwert
dasfg
dsaf

2. 多个文件打patch

(1)查看文件内容

[wln@localhost patch]$ ll
总计 8
drwxrwxr-x 3 wln wln 4096 06-09 15:48 new
drwxrwxr-x 3 wln wln 4096 06-09 15:48 old
[wln@localhost patch]$ tree
.
|– new
|   `– a
|       |– a.txt
|       `– b
|           `– foo.txt
`– old
    `– a
        `– b
            `– foo.txt

[wln@localhost patch]$ cat old/a/b/foo.txt 
old_line_1
old_line_2
12324
[wln@localhost patch]$ cat new/a/a.txt 
fdfas
fafes
1233
5678
2345
[wln@localhost patch]$ cat new/a/b/foo.txt 
new_line_1
new_line_2

(2)制作patch

[wln@localhost patch]$ diff -Naur old new > a.patch
[wln@localhost patch]$ cat a.patch 
diff -Naur old/a/a.txt new/a/a.txt
— old/a/a.txt 1970-01-01 08:00:00.000000000 +0800
+++ new/a/a.txt 2014-06-09 15:48:45.000000000 +0800
@@ -0,0 +1,5 @@
+fdfas
+fafes
+1233
+5678
+2345
diff -Naur old/a/b/foo.txt new/a/b/foo.txt
— old/a/b/foo.txt     2014-06-09 15:48:49.000000000 +0800
+++ new/a/b/foo.txt     2014-06-09 15:48:45.000000000 +0800
@@ -1,3 +1,2 @@
-old_line_1
-old_line_2
-12324
+new_line_1
+new_line_2

(3)执行patch

[wln@localhost patch]$ cd old/
[wln@localhost old]$ patch -p1 < ../a.patch 
patching file a/a.txt
patching file a/b/foo.txt
[wln@localhost old]$ cd ../
[wln@localhost patch]$ tree
.
|– a.patch
|– new
|   `– a
|       |– a.txt
|       `– b
|           `– foo.txt
`– old
    `– a
        |– a.txt
        `– b
            `– foo.txt

6 directories, 5 files
[wln@localhost patch]$ cat old/a/a.txt 
fdfas
fafes
1233
5678
2345
[wln@localhost patch]$ cat old/a/b/foo.txt
new_line_1
new_line_2
[wln@localhost patch]$ cat new/a/a.txt 
fdfas
fafes
1233
5678
2345
[wln@localhost patch]$ cat new/a/b/foo.txt 
new_line_1
new_line_2
[wln@localhost patch]$ 

为什么要进入到old/下执行patch?

因为有新文件a/a.txt生成,如果直接在制作patch路径执行patch,会产生问题。

假如没有新文件生成,可以直接在制作patch的当前路径下执行patch

(4)打好patch,发现有问题,想返回,则执行-R 

[wln@localhost patch]$ cd old/
[wln@localhost old]$ patch -R -p1 < ../a.patch 
patching file a/a.txt
patching file a/b/foo.txt

参考:

(1)摘录:linux下打patch方法

http://blog.csdn.net/sunyubo458/article/details/6680840

Flag Counter

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198613.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MyEclipse SVN插件的安装详解[通俗易懂]

    MyEclipse SVN插件的安装详解[通俗易懂]一、安装类型(一)、在线安装1.打开Myeclipse,在菜单栏中选择Help→SoftwareUpdates→FindandInstall;2.选择Searchfornewfeaturestoinstall,点击Next进入下一步;

    2022年7月20日
    15
  • 二叉树层序遍历Java实现「建议收藏」

    二叉树层序遍历Java实现「建议收藏」publicclassNode{privateintvalue;privateNodelchild;privateNoderchild;publicintgetValue(){returnvalue;}publicvoidsetValue(intvalue){this.value=value;}

    2022年5月11日
    34
  • 普罗米修斯监控openGauss

    普罗米修斯监控openGauss1、前期准备1.1项目依赖链接依赖开源工程工程链接普罗米修斯https://github.com/prometheus/pushgatewayopengauss_exporthttps://github.com/enmotech/opengauss_exporterpushgatewayhttps://github.com/prometheus/pushgatewayopenGausshttps://gitee.com/opengauss/openGauss

    2022年7月19日
    27
  • axisfault 解析报文异常_oculus headset only

    axisfault 解析报文异常_oculus headset only一般说来,不可避免的WebService的服务中也会出现异常,举个简单的例子,一个服务接受一个SOAP请求消息,获取有效负载后,进行一个数据库更新操作,而在更新操作过程中发生了SQLException,这个时候就需要告诉客户端(调用WebService)出现异常了,Axis2将异常封装成为一个AxisFault进行抛出。任何类型的异常Axis2都会对其进行封装,而不管该异常是运行时异常,还

    2025年11月8日
    7
  • python的三方库_py第三方库有哪些

    python的三方库_py第三方库有哪些Python常用第三方库可以在ThePythonPackageIndex(PyPI)软件库(官网主页:https://pypi.org/)查询、下载和发布Python包或库。网络爬虫requests:https://pypi.org/project/requests/简洁且简单的处理HTTP请求的第三方库 scrapy:https://scrap…

    2022年10月14日
    6
  • FZU2126:消除类游戏(DP)

    FZU2126:消除类游戏(DP)

    2022年1月8日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号