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)
上一篇 2025年8月24日 下午6:43
下一篇 2025年8月24日 下午7:15


相关推荐

  • Android Studio gardle 配置 ndk 指定 ABI: abiFilters 详解

    Android Studio gardle 配置 ndk 指定 ABI: abiFilters 详解一、ABI是什么ABI是ApplicationBinaryInterface的缩写。不同Android手机使用不同的CPU,因此支持不同的指令集。CPU与指令集的每种组合都有其自己的应用二进制界面(或ABI)。ABI可以非常精确地定义应用的机器代码在运行时如何与系统交互。您必须为应用要使用的每个CPU架构指定ABI。典型的ABI包含以下信息:机…

    2022年5月11日
    267
  • Android EdtiText 添加表情

    Android EdtiText 添加表情

    2021年9月1日
    51
  • 留言板的代码_留言板留言大全短句

    留言板的代码_留言板留言大全短句<!DOCTYPEhtml><htmllang=”en”><head><metacharset=”UTF-8″><metahttp-equiv=”X-UA-Compatible”content=”IE=edge”><metaname=”viewport”content=”width=device-width,initial-scale=1.0″><title>D.

    2022年10月21日
    4
  • 【流量代理】代理模式「建议收藏」

    【流量代理】代理模式「建议收藏」文章目录直连模式pac模式全局模式参考找了好几篇文章,终于找到了Pac的全称。直连模式顾名思义直连模式就是不适用任何代理的模式,这种模式下你访问网站时不会走代理ip还是你自己的。pac模式这个是大家普遍适用的一种模式全称叫(Proxyauto-config)代理自动配置模式,这种模式浏览器会根据一些配置的规则选择某个网站是否走代理。一般情况下,使用Pac模式访问国内网站不会走代理,访问国外网站会走代理,优点是节省流量。全局模式这个模式就是指所有的请求都会通过代理服务器。这种模式下虽然简单粗

    2022年10月18日
    5
  • 学习笔记——STM32摄像头OV7725(一)

    学习笔记——STM32摄像头OV7725(一)OV7725简介在各类信息中,图像含有最丰富的的信息,作为机器视觉领域的核心部件,摄像头被广泛地应用在安防、探险、以及车牌检测等场合。其按照输出信号的类型可以分为数字和模拟摄像头,按照材料构成可以分为CCD和CMOS。模拟摄像头的感光器件一般维持在752(H)*582(V)像素指标左右。由于CCD的像素由MOS电容组成,读取电荷信号是需要使用电压相当大的(至少2V)的二相/三相/四相的时序脉…

    2026年2月26日
    4
  • Mac WebServer、MySql安装、PHPAdmin安装

    Mac WebServer、MySql安装、PHPAdmin安装

    2021年9月1日
    85

发表回复

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

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