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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicat15 激活码[免费获取]

    (navicat15 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~MLZP…

    2022年3月21日
    58
  • C++游戏编程(一开篇)

    C++游戏编程(一开篇)

    2021年12月3日
    58
  • java mencoder_mencoder java linux[通俗易懂]

    java mencoder_mencoder java linux[通俗易懂]在执行转化的时候只能转化1分钟的影片超过1分钟影片的都不能转化。可是直接输入命令行又能全部转化。高分求解try{Runtimert=Runtime.getRuntime();Processproc=rt.exec(“mencoder”+ol…在执行转化的时候只能转化1分钟的影片超过1分钟影片的都不能转化。可是直接输入命令行又能全部转化。高分求解try{Runtimert=Runtime….

    2025年6月11日
    0
  • 大数据,云计算,物联网三者的区别和关联方法_云计算和物联网的应用

    大数据,云计算,物联网三者的区别和关联方法_云计算和物联网的应用大数据时代的到来,是全球知名咨询公司麦肯锡最早提出的,麦肯锡称:“数据,已经渗透到当今每一个行业和业务职能领域,成为重要的生产因素。人们对于海量数据的挖掘和运用,预示着新一波生产率增长和消费者盈余浪潮的到来。”《互联网进化论》一书中提出“互联网的未来功能和结构将于人类大脑高度相似,也将具备互联网虚拟感觉,虚拟运动,虚拟中枢,虚拟记忆神经系统”,并绘制了一幅互联网虚拟大脑结构图。…

    2022年9月28日
    0
  • ActiveMQ简介与安装

    1.ActiveMQ简介ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。ActiveMQ使用Apa

    2021年12月28日
    37
  • 树莓派控制摄像头_树莓派连接摄像头

    树莓派控制摄像头_树莓派连接摄像头树莓派外接摄像头,最常用的有两种:CSI摄像头、USB摄像头。当然网络摄像头也是可以的。一般的USB摄像头都是UVC免驱的,而且可以方便的插拔和安装,平时最为常用。一、硬件设备usb摄像头使用的罗技c310。(只要是UVC免驱就可以)二、连接并测试摄像头lsusb并将usb摄像头插上插入usb摄像头后,会显示设备ID和信息,像我的:Bus001Device008:ID046d:081bLogitech,Inc.WebcamC310…

    2022年10月10日
    1

发表回复

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

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