linux笔记 diff及patch的制作与使用

news2024/11/27 8:40:38

相关命令展示

为方便查阅博客使用,预先展示相关命令

diff命令

diff -uN old.txt new.txt > patch_test.patch

单个文件,不需要使用-r参数

diff 选项参数 旧文件(夹) 新文件(夹) > 补丁

diff命令的常用选项参数

-r
递归recursion 将新旧版本代码所在目录所有文件递归比较,包括子目录

-N
确保补丁正确无误地处理已创建或删除文件的情况
-u
默认为输出每个需要修改的代码块的前后3行,如需指定行数,则使用-uNUM,更改NUM为所需行数

patch命令

旧文件目录

patch -p0 < patch_test.patch 

注意!patch必须在旧文件夹中打,否则将会发生错误!

patch命令的格式

patch将diff生成的补丁记录下的差异信息,应用到旧文件上

patch 选项参数 < 补丁 #	patch中已含有新旧文件的信息,无须将新旧文件作为参数输入

patch的常用选项参数

-pNUM
NUM表示忽略的文件夹层数,忽略patch文件中新旧文件的父目录层数
以desktop/diff_patch_test/old为例
-p0为在desktop目录下找diff_patch_test再找old
-p1则是忽略第一层的desktop目录,直接从当前目录下找diff_patch_test再找old
(存疑)
-E
empty 如果发现空文件,则删除,常见于需要删除旧文件夹中某个旧文件整体的情况,以及恢复补丁时删除之前新写的无效文件
-R
reverse 取消打的补丁

通过patch恢复源文件

当补丁错误时,可以使用-RE选项参数恢复源文件,意为取消打的补丁,并删除空文件

patch -RE -p0 <patch_test.patch 

案例1:单个文件的补丁制作与替换

以单个文件为例,diff与patch制作及打补丁呈现过程

1.源文件(旧)

old.txt

11111111
22222222
33333333
44444444
aaaaaaaa
bbbbbbbb
cccccccc
dddddddd

2.目的文件(新)

new.txt

11111111
55555555
66666666
77777777
aaaaaaaa
eeeeeeee
ffffffff
gggggggg

3.通过diff命令制作patch文件

在该文件目录下

diff -uN old.txt new.txt > patch_test.patch

因此处为单个文件,不需要使用-r参数

diff命令的格式

diff 选项参数 旧文件(夹) 新文件(夹) > 补丁

diff命令的常用选项参数

-r
递归recursion 将新旧版本代码所在目录所有文件递归比较,包括子目录

-N
确保补丁正确无误地处理已创建或删除文件的情况
-u
默认为输出每个需要修改的代码块的前后3行,如需指定行数,则使用-uNUM,更改NUM为所需行数

4.查看patch文件的组成

在这里插入图片描述

--- old.txt	2023-02-09 10:17:20.787930669 +0800	#	补丁头 ---开头表示旧文件
+++ new.txt	2023-02-09 10:18:54.989109075 +0800	#	补丁头 +++开头表示新文件
@@ -1,8 +1,8 @@	#	@@开头表示块位置 是文件需要修改前后的定位行及段落区间等信息,以@@结束
				#	-1,8表示需要修改的代码块在旧文件的行号,以及修改前该代码块区间的总行数
				# +1,8表示需要修改的代码块在新文件的行号,以及修改后该代码块区间的总行数
 11111111	#块内容 块内容的首列缩进1字符,空白表示引用/未作增删 -表示删去的内容 +表示增加的内容 
-22222222
-33333333
-44444444
+55555555
+66666666
+77777777
 aaaaaaaa
-bbbbbbbb
-cccccccc
-dddddddd
+eeeeeeee
+ffffffff
+gggggggg

5.打patch

旧文件目录

patch -p0 < patch_test.patch 

注意!patch必须在旧文件夹中打,否则将会发生错误!
错误如下:
在这里插入图片描述

patch命令的格式

patch将diff生成的补丁记录下的差异信息,应用到旧文件上

patch 选项参数 < 补丁 #	patch中已含有新旧文件的信息,无须将新旧文件作为参数输入

patch的常用选项参数

-pNUM
NUM表示忽略的文件夹层数,忽略patch文件中新旧文件的父目录层数
以desktop/diff_patch_test/old为例
-p0为在desktop目录下找diff_patch_test再找old
-p1则是忽略第一层的desktop目录,直接从当前目录下找diff_patch_test再找old
(存疑)
-E
empty 如果发现空文件,则删除,常见于需要删除旧文件夹中某个旧文件整体的情况,以及恢复补丁时删除之前新写的无效文件
-R
reverse 取消打的补丁

通过patch恢复源文件

当补丁错误时,可以使用-RE选项参数恢复源文件,意为取消打的补丁,并删除空文件

patch -RE -p0 <patch_test.patch 

案例2:文件夹的补丁制作与替换

原理基本与上相同
与单个文件不同,在diff制作补丁时,需遍历整个文件夹,因此需要加-r选项参数
注意打补丁时需要到旧文件夹的目录下!
此处的-p1参数,是因为新旧文件夹中的改动通常在new文件夹和old文件夹里,需要忽略首层的old和new文件夹,将内容物替换

# 制作补丁
diff -uNr  old_docu  new_docu  > new_docu.patch
# 打补丁
cd new_docu	#	需要到旧文件夹目录下!
patch -p1 < old_docu.patch	#	注意选项参数-p1
 
# 如有需要,取消补丁
#patch -R -p1 <new_docu.patch

案例3:git打补丁实战

1.生成

对于git的补丁有两种方案
git diff
生成UNIX标准补丁.diff文件
git format-patch
生成Git专用.patch文件

.diff文件只是记录文件改变的内容,不带有commit记录信息,多个commit可以合并成一个diff文件
.patch文件带有记录文件改变的内容,也带有commit记录信息,每个commit对应一个patch文件

2.检查和应用

检查补丁状态

git apply --stat patch_name.patch

检查补丁是否可打入

git apply --check patch_name.patch

正式打入

git apply patch_name.patch

References

补丁的制作与应用

git生成patch和应用
如何用git生成pitch

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/331871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PS快速入门系列

01-界面构成 1菜单栏 2工具箱 3工县属性栏 4悬浮面板 5画布 ctr1N新建对话框&#xff08;针对画布进行设置&#xff09; 打开对话框&#xff1a;ctrl0&#xff08;字母&#xff09; 画布三种显示方式切换&#xff1a;F 隐藏工具箱&#xff0c;工具属性栏&#xff0c;悬浮面板…

Linux perf probe 的使用(三)

文章目录前言一、Dynamic Tracing二、kprobes2.1 perf kprobe 的使用2.2 kprobe Arguments3.3 tcp_sendmsg()3.3.1 Kernel: tcp_sendmsg()3.3.2 Kernel: tcp_sendmsg() with size3.3.2 Kernel: tcp_sendmsg() line number and local variable三、uprobes的使用3.1 perf uprobe …

PTA L1-043 阅览室

前言&#xff1a;内容包括四大模块&#xff1a;题目&#xff0c;代码实现&#xff0c;大致思路&#xff0c;代码解读 题目&#xff1a; 天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时&#xff0c;管理员输入书号并按下S键&#xff0c;程序开始计时&#xf…

Java NIO学习(一):Java NIO概述

一、 IO 概述IO 的操作方式通常分为几种&#xff1a;同步阻塞 BIO、同步非阻塞 NIO、异步非阻塞 AIO。&#xff08;1&#xff09;在 JDK1.4 之前&#xff0c;我们建立网络连接的时候采用的是 BIO 模式。&#xff08;2&#xff09;Java NIO&#xff08;New IO 或 Non Blocking I…

【C语言】速刷日记

这里总结10道C语言经典题型问题&#xff0c;有兴趣可以刷刷看。1.递归问题12.递归问题23.短路求值问题4.字符数组定义问题5.二维数组元素访问问题6.指针问题7.二维数组地址问题8.前置与后置问题9.求1的个数问题10.求1的个数移位操作符1.递归问题1 给定 fun 函数如下&#xff0…

Fluid-架构详细解析

前言Fluid 是云原生分布式数据集编排和加速引擎&#xff0c;主要服务于云原生场景下的数据密集型应用&#xff0c;例如大数据应用、AI 应用等。其目标是为AI与大数据云原生应用提供一层高效便捷的数据抽象&#xff0c;将数据从存储抽象出来&#xff0c;以便实现&#xff1a;通过…

服务调用分布式session

目录一、nginx动静分离二、服务调用1、创建配置zmall-cart购物车模块2、创建配置zmall-order订单模块3、服务调用三、spring session实战1、什么是Spring Session2、为什么要使用Spring Session3、错误案例展示4、配置spring-session四、二级域名问题五、用户登录一、nginx动静…

从某种程度上来看,产业互联网是一次对于互联网的弥补和修正

如果对当下我们正在经历的这样一个时代进行一次定义的话&#xff0c;我更加愿意将其划归到产业互联网的范畴里。可能有人会说&#xff0c;这与产业互联网并无联系&#xff0c;因为从本质上来看&#xff0c;当下我们所经历的这样一个时代&#xff0c;其实是与互联网并没有太多联…

(深度学习快速入门)第五章第一节2:GAN经典案例之MNIST手写数字生成

获取pdf&#xff1a;密码7281 文章目录一&#xff1a;数据集介绍二&#xff1a;GAN简介&#xff08;1&#xff09;简介&#xff08;2&#xff09;损失函数三&#xff1a;代码编写&#xff08;1&#xff09;参数及数据预处理&#xff08;2&#xff09;生成器与判别器模型&#x…

Acwing---112.雷达设备

雷达设备1.题目2.基本思想3.代码实现1.题目 假设海岸是一条无限长的直线&#xff0c;陆地位于海岸的一侧&#xff0c;海洋位于另外一侧。 每个小岛都位于海洋一侧的某个点上。 雷达装置均位于海岸线上&#xff0c;且雷达的监测范围为 d&#xff0c;当小岛与某雷达的距离不超…

2023-02-09 mysql/innodb存储

前言 大家都知道 MySQL 的数据都是保存在磁盘的,那具体是保存在哪个文件呢?MySQL 存储的行为是由存储引擎实现的,MySQL 支持多种存储引擎,不同的存储引擎保存的文件自然也不同。InnoDB 是我们常用的存储引擎,也是 MySQL 默认的存储引擎。本文主要以 InnoDB 存储引擎展开讨…

centos7.6 设置防火墙

1、查看系统版本 cat /etc/redhat-release2、查看防火墙运行状态 systemctl status firewalld这里可以看到当前是未运行状态(inactive)。 3、关闭开机自启动防火墙 systemctl disable firewalld.service4、启动防火墙并查看状态&#xff0c;系统默认 22 端口是开启的。 sy…

云原生微服务应用平台 EDAS 2022 年度报告

作者&#xff1a;孤戈 最近一年来&#xff0c;随着我们的客户对于云技术的诉求从资源快速交付的服务&#xff0c;转变为对资源精益运用的服务。EDAS 团队结合公共云上所服务的企业类客户的几万个应用&#xff0c;选取了 8 个最具代表性的指标&#xff0c;进行了一次系统性的分…

进度条实时显示request下载文件的解决方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Linux -文件打包和解压缩

1、概念 在 Windows 上最常见的不外乎这两种 .zip&#xff0c;.7z 后缀的压缩文件。而在 Linux 上面常见的格式除了以上两种外&#xff0c;还有 .rar&#xff0c;.gz&#xff0c;.xz&#xff0c;.bz2&#xff0c;.tar&#xff0c;.tar.gz&#xff0c;.tar.xz&#xff0c;*.tar…

python--turtle

前言 就随便练练&#xff0c;学习一下turtle库的使用 正文 1.语法学习 import turtle #导入库 turtle.showturtle() #画笔显示箭头 turtle.write("我是大帅逼") #写下字符串 turtle.forward(300) …

拦截器interceptor总结

拦截器一. 概念拦截器和AOP的区别&#xff1a;拦截器和过滤器的区别&#xff1a;二. 入门案例2.1 定义拦截器bean2.2 定义配置类2.3 执行流程2.4 简化配置类到SpringMvcConfig中一. 概念 引入&#xff1a; 消息从浏览器发送到后端&#xff0c;请求会先到达Tocmat服务器&#x…

C语言一维数组篇【下】——每日刷题经验分享

一维数组篇——每日刷题经验分享~&#x1f60e;前言&#x1f64c;有序序列插入一个整数 &#x1f60a;序列中删除指定数字 &#x1f60a;序列中整数去重小乐乐查找数字筛选法求素数总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦~ &#x1f60a;最喜欢的座右…

【FFMPEG源码分析】从ffplay源码摸清ffmpeg框架(一)

ffplay入口 ffmpeg\fftools\ffplay.c int main(int argc, char **argv) {/*******************start 动态库加载/网络初始化等**************/int flags;VideoState *is;init_dynload();av_log_set_flags(AV_LOG_SKIP_REPEATED);parse_loglevel(argc, argv, options);/* regis…

SSJ-21A AC220V静态【时间继电器】

系列型号&#xff1a; SSJ-11B静态时间继电器&#xff1b;SSJ-21B静态时间继电器 SSJ-21A静态时间继电器&#xff1b;SSJ-22A静态时间继电器 SSJ-22B静态时间继电器SSJ-42B静态时间继电器 SSJ-42A静态时间继电器SSJ-41A静态时间继电器 SSJ-41B静态时间继电器SSJ-32B静态时间继电…