使用diff和patch进行简单的文件版本管理

手写现代前端框架diff算法-前端面试进阶 在前端工程上,日益复杂的今天,性能优化已经成为必不可少的环境。前端需要从每一个细节的问题去优化。那么如何更优,当然与他的如何怎么实现的有关。比如key为什么不能使用index呢?为什么不使用随机数呢?答案当然是影响性能,那为什么?相信你看完本文的diff算法就能略懂一些。 阅读详情

在Unix系统下,维护源码版本可以使用很多方法,其中最常用的当然是大名鼎鼎的CVS,但实际上,简单的版本维护工作并没有必要使用复杂的CVS等专门的版本维护工具,Unix标配中的diff和patch工具就完全可以完成代码的简单备份和升级工作。

diff 以"行"为单位比较两个文本文件(也可以是目录比较),并将不同之处以某种格式输出到标准输出上;patch可以读入这种输出,并按照一定指令使源文件 (目录)按照目标文件(目录)更新。Linux内核源码就是按照这种方式保持更新的,我们在www.kernel.org上可以下载到最新内核的 patch文件的bzip2包。本文以gnudiffutils 2.7和patch 2.5为例介绍diff和patch工具的使用。

1.diff

diff 既可以用来比较两个文件,也可以用来比较两个目录中每个文件。使用-r(--recursive)参数时还可以在目录中嵌套比较。比较目录时除比较同名文 件外,对不同名的文件当成新文件处理。对于比较C程序文件,diff还提供了专门的参数(-p,--show-c-function)来标识不同之处所在 的函数名。

diff的输出格式有三种:列举方式、命令模式和上下文模式,其中命令模式有分为两种:ed命令格式和RCS(Revision Control System,版本控制系统)命令格式,上下文模式也按格式分为老版和新版两种。看下面的例子就能基本清楚各个格式的区别:



命令格式记录的是从test1更新到test2所需要执行的命令,而上下文模式通常可读性更好一些,它所记录的主要是二者的差异,通常还记录所需修改部分的上下几行(可配置)内容以供比较。见下面的例子:



新版格式较之老版要紧凑一些,Linux内核源码的升级就是按照新版上下文格式用diff组织的,比如patch-2.4.16中所用的具体命令为:

diff -Nur linux-2.4.15 linux

参数N表示如果某个文件仅在一个目录中出现,则假定其在另一个目录中为空文件;u表示unified格式,r表示在目录中嵌套使用,linux-2.4.15显然是老核的目录名,而linux则为新核的目录名。

 2 patch

尽 管并没有指定patch和diff的关系,但通常patch都使用diff的结果来完成打补丁的工作,这和patch本身支持多种diff输出文件格式有 很大关系。patch通过读入patch命令文件(可以从标准输入),对目标文件进行修改。通常先用diff命令比较新老版本,patch命令文件则采用 diff的输出文件,从而保持原版本与新版本一致。

patch的标准格式为


patch [options] [originalfile] [patchfile]

如果patchfile为空则从 标准输入读取patchfile内容;如果originalfile也为空,则从patchfile(肯定来自标准输入)中读取需要打补丁的文件名。因 此,如果需要修改的是目录,一般都必须在patchfile中记录目录下的各个文件名。绝大多数情况下,patch都用以下这种简单的方式使用:


patch -p[num] <patchfile

patch命令可以忽略文件中的 冗余信息,从中取出diff的格式以及所需要patch的文件名,文件名按照diff参数中的"源文件"、"目标文件"以及冗余信息中的"Index:" 行中所指定的文件的顺序来决定。也就是说,对于如下diff结果文件(Linux内核源码2.4.16升级包,部分):

 
diff -Nur linux-2.4.15/Makefile linux/Makefile
--- linux-2.4.15/Makefile Thu Nov 22 17:22:58 2001
+++ linux/Makefile Sat Nov 24 16:21:53 2001
@@ -1,7 +1,7 @@
VERSION = 2
PATCHLEVEL = 4
-SUBLEVEL = 15
-EXTRAVERSION =-greased-turkey
+SUBLEVEL = 16
+EXTRAVERSION =

KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
……

patch首先尝试当前目录(或 者-d参数指定的目录)下的linux-2.4.15/Makefile文件是否存在,如果不存在则试图对linux/Makefile文件操作,仅当两 者都不存在时(或者设置了POSIXLY_CORRECT环境变量)才会读取Index:的内容(此文件中没有标识)。

前 面提到的-p参数决定了是否使用读出的源文件名的前缀目录信息,不提供-p参数,则忽略所有目录信息,-p0(或者-p 0)表示使用全部的路径信息,-p1将忽略第一个"/"以前的目录,依此类推。如/usr/src/linux-2.4.15/Makefile这样的文 件名,在提供-p3参数时将使用linux-2.4.15/Makefile作为所要patch的文件。

对于刚才举的 Linux内核源码2.4.16升级包的例子,假定源码目录位于/usr/src/linux中,则在当前目录为/usr/src时使用"patch -p0 <patch-2.4.16"可以工作,在当前目录为/usr/src/linux时,"patch -p1<patch-2.4.16"也可以正常工作。

patch可以直接操作上下文格式以及混合ed格式的diff输出文件,而将ed格式文件通过管道提交给ed程序操作(暂时不知RCS格式的文件如何处理)。


3. 配合使用diff和patch升级源码

在此仅举一个简单的例子来说明如何用diff/patch工具维护源码升级。

假设program-1.0目录中为老版,现开发完成的新版位于program-2.0目录中,将两个目录置于同一父目录下,然后在该父目录上执行:


diff -Nur program-1.0 program-2.0 >program-2.0.patch

将生成一个program-2.0.patch的补丁文件,发布该补丁文件(当然可以先压缩成bzip2格式)。

假设拿到的是program-2.0.patch.bz2文件,则在program-1.0目录同级执行:


bzcat program-2.0.patch.bz2 | patch -p0

如此即完成了从1.0到2.0的升级。

如果希望恢复到原版本,可以使用-R(--reverse)参数,但仅对上下文格式的diff文件有效。还有一个备份参数也可以使用,但简单应用中,整个目录备份可能更方便一些。


 


 


一个例子:

fft为当前工作目录,fft.bak为源文件备份。
现在diff -Nur fft fft.bak > diff.fft,则可以生成一个关于fft的diff文件。这个文件的目标修改目录是fft.bak
如果执行patch -p0 < diff.fft,则可以将fft.bak中的文件升级为fft
MATLAB打开.m文件乱码解决办法 Matlab打开.m文件出现中文乱码问题,是因为Matlab存在两种编码格式:GBK和UTF-8,而不同版本的Matlab编码格式可能不统一,因此在不同版本的Matlab打开文件,由于编码格式的改变,会导致注释乱码。 1.查看你的Matlab的文件编码方式,在Matlab的命令行窗口输入feature('locale') ,如下图,可以看到默认编码为GBK,那问题就变成了将Matlab的文件编码方式GBK修改成UTF-8; 2.找到你的Matlab安装目录bin文件夹下的lcdata_utf. 阅读详情

相关推荐

DRAM内存模拟持久化设备的方法

由于持久化内存介质NVM技术的发展,越来越多的科研工作者投身到NVM相关的研究当中。但由于目前工业界并没有推出广泛使用的NVM介质设备,所以科研工作都需要自己以现有的条件,模拟NVM设备使用场景。一个简单的方法是:通过修改DRAM模拟器,达到模拟NVM的目的(可以参考:DRAMSim2模拟器分析与应用)。更高端的方式是:在真实系统中,将内存划分出一块儿,用来模拟NVM设备(类似于传统的ramdis

酷炫人笨笨熊 1899

简单Diff算法

简单Diff算法分享

dfc_dfc的博客 1297

银河麒麟V10系统下VLC播放器安装全攻略(附3.0.9.2版本离线包下载)

本文详细介绍了在银河麒麟V10操作系统无网络环境下,从零开始编译安装VLC 3.0.9.2播放器的完整攻略。通过构建本地YUM仓库解决依赖问题,提供离线资源包下载,并逐步指导完成编译环境配置、软件编译与安装,帮助用户在国产麒麟系统上成功部署强大的多媒体播放能力。

a2b3c4d5e的博客 1222

使用 diff-match-patch 写对比组件

使用 diff-match-patch 写对比组件,没有知识详情,只有代码。

蓝_蓝的博客 5083

ShardingSphere-JDBC-若依框架集成(SpringBoot)

ShardingSphere基础知识、ShardingSphere-JDBC如何集成进若依框架中 使用的是若依框架前后端版本、动态数据源,可自行切换,默认数据源为达梦8代理端,

编程小菜鸟的笔记 8168

基于 YOLOv26 的食品包装缺陷检测系统:智能视觉质检方案

本文提出了一种基于YOLOv26深度学习的食品包装缺陷智能检测系统。该系统能够自动识别多种常见包装缺陷,包括密封不良、破损、污染、标签错误等8类问题。相比传统人工检测方法,该系统具有高精度、多类别分类、实时推理等优势。文章详细介绍了系统架构,包含数据采集、预处理、YOLOv26检测模型和后处理四个核心模块,并提供了完整的环境配置和数据处理代码实现。该系统为食品包装行业提供了一种高效、准确的智能视觉质检解决方案。

一键难忘的博客 689

git diff 取差异命令获取变更的文件列表

git diff --stat

安卓 高通 bsp ,同行欢迎交流 3233

002、搭建你的第一个Agent开发环境:Python与核心库安装

在上一篇《Agent智能体开发入门:概念、应用与前景》中,我们描绘了Agent智能体的宏伟蓝图,理解了其作为“数字员工”的巨大潜力。然而,许多开发者在迈出第一步时,常常被复杂的依赖、版本冲突和晦涩的配置所劝退,空有想法却无从下手。这种感觉就像拿到了一张藏宝图,却找不到出发的港口。本文正是你的“启航指南”。我们将彻底解决这个痛点,通过一个清晰、可复现的流程,为你搭建一个专为Agent开发量身定制的Python环境。一个纯净、隔离的Python虚拟环境,避免项目间的“依赖地狱”。一套经过验证的核心工具链。

G_RE_RE的博客 111

【免费下载】 diff-match-patch:文本差异和匹配的利器

diff-match-patch 是一个强大的开源 JavaScript 库,由 Google 开发并维护,用于计算两个字符串之间的差异,并进行高效的匹配和补丁应用。这个库广泛应用于版本控制系统、协同编辑系统以及任何需要处理文本变化的场景。 ## 项目介绍 diff-match-patch 提供了一套完整的工具集,包括 `diff`(差异计算)、`match`(模式匹配)和 `patch`(补...

gitblog_00031的博客 2536

深入浅出讲解外部服务提供者 OAuth 2.0 帐户客户端创建与 ABAP 系统集成

本文详细介绍了在SAP ABAP平台配置OAuth 2.0客户端以安全调用外部Web服务的完整流程。主要内容包括:首先需要在外部服务提供者平台注册OAuth客户端,获取client ID和client secret;其次需特别注意重定向URI必须是公开可访问的地址;然后在ABAP系统中通过事务码OA2C_CONFIG配置OAuth客户端信息;最后阐述了常见的错误排查方法。文章强调了OAuth 2.0作为SAP系统与外部服务安全集成的标准协议,正确配置客户端是确保后续API调用安全可靠的关键前提。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1735

手把手入门YOLO到改进优化教程 | 【P2基础篇】数据标注+环境搭建+模型训练

本节以 YOLO自定义目标检测训练为主线,带你从零开始完成 数据标注 → 环境搭建 → 模型训练 → 结果的流程。使用labelImg制作符合YOLO格式的自定义数据集。在Windows基于 Python + Conda 创建独立虚拟环境,安装 PyTorch + CUDA + ultralytics,配置 PyCharm 运行环境。本节不仅使用自定义数据集进行演示,同时也用公开数据集训练 YOLO,查看训练日志与可视化结果(PR、P/R/F1 曲线等)等。

嵌入式阿齐Archie 2万+

diffpatch升级_使用diff和patch进行简单的文件版本管理

在Unix系统下,维护源码版本可以使用很多方法,其中最常用的当然是大名鼎鼎的CVS,但实际上,简单的版本维护工作并没有必要使用复杂的CVS等专门的版本维护工具,Unix标配中的diff和patch工具就完全可以完成代码的简单备份和升级工作。diff 以"行"为单位比较两个文本文件(也可以是目录比较),并将不同之处以某种格式输出到标准输出上;patch可以读入这种输出,并按照一定指令使源文件 (目录...

weixin_31134719的博客 259

JS逆向-B站评论数据w_rid参数和wts参数

本文是该专栏的第69篇,后面会持续分享python爬虫干货知识。本文以B站的评论数据为例,通过JS逆向获取其中的w_rid参数以及wts参数生成规律。具体的“逆向”思路逻辑,笔者将会详细介绍每个步骤,并且将在正文结合“完整代码”来详细介绍。废话不多说,具体细节部分以及详细思路逻辑,笔者将在正文结合完整代码进行详细说明。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 2050

用Diff和Patch工具维护源码

在Unix系统下,维护源码版本可以使用很多方法,其中最常用的当然是大名鼎鼎的CVS,但实际上,简单的版本维护工作并没有必要使用复杂的CVS等专门的版本维护工具,Unix标配中的diff和patch工具就完全可以完成代码的简单备份和升级工作。diff以"行"为单位比较两个文本文件(也可以是目录比较),并将不同之处以某种格式输出到标准输出上;patch可以读入这种输出,并按照一定指令使源文件(目录)按

MengBoy的专栏 2152

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

diff and patch

<br />http://www.ibm.com/developerworks/cn/linux/l-diffp/<br /> <br />在Unix系统下,维护源码版本可以使用很多方法,其中最常用的当然是大名鼎鼎的CVS,但实际上,简单的版本维护工作并没有必要使用复杂的CVS等专门的版本维护工具,Unix标配中的diff和patch工具就完全可以完成代码的简单备份和升级工作。<br />diff以"行"为单位比较两个文本文件(也可以是目录比较),并将不同之处以某种格式输出到标准输出上;patch可以读入这

dreamxu的专栏 433

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

[转] 用Diff和Patch工具维护源码

在Unix系统下,维护源码版本可以使用很多方法,其中最常用的当然是大名鼎鼎的CVS,但实际上,简单的版本维护工作并没有必要使用复杂的CVS等专门的版本维护工具,Unix标配中的diff和patch工具就完全可以完成代码的简单备份和升级工作。 diff以"行"为单位比较两个文本文件(也可以是目录比较),并将不同之处以某种格式输出到标准输出上;patch可以读入这种输出,并按照一定指令使源文件(目录...

weixin_30445169的博客 99

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Linux之旅(1): diff, patch和quilt

Linux之旅(1): diff, patch和quiltdiff和patch是在Linux环境为源代码制作和应用补丁的标准工具。diff可以比较文件或目录的差异,并 将差异记录到补丁文件。patch可以将补丁文件应用到源代码上。quilt也是一个制作和应用补丁的工具,它适合于管理较多补丁。quilt有自己的特 有的工作方式。本文通过简单的例子介绍这三个常用的工具。0 示例工程我们先准备一个用来做...

wsclinux的专栏 743

diff文件和patch文件使用

简述 顾名思义,diff是差异的意思,patch是补丁的意思,合起来理解就是根据差异进行打补丁。 应用场景 补丁patch这中方式在大型的项目中比较常见,一个需求需要对多个模块进行修改,比如一个项目中有module1......module9九个模块,module1上有文件修改了,需要在其它模块上进行验证(本地进行验证,代码未提交),这时比较方面快捷的方式就是生成一个patch文件,发给相应模块的开发人员进行验证。 补丁生成及使用 OK,进入正题,本地模仿...

cocoabird 7268

Linux中的patch和diff命令完全指南

本文详细介绍了Linux中diff和patch命令的使用方法。diff用于比较文件差异并生成补丁文件,支持多种输出格式;patch则用于将补丁应用到原文件上。文章通过实际示例演示了基本用法、常用选项及典型应用场景,包括软件源码补丁管理、配置文件版本控制和代码协作等场景。同时提供了最佳实践建议,帮助开发者高效使用这对工具进行版本管理和代码协作。

道阻其长,未来可期。笔耕不辍,行则将至! 1491

学会使用 diff 和 patch 命令协同开发

本文我们就来聊聊,怎么使用 diff 和 patch命令进行协作开发。 之前我在公司上班的时候,需要经常跟外国同事一起协同开发(之前在外企上班)。由于是异地协作,所以沟通几乎全部是通过邮件。 我们有使用 Git 进行代码版本管理,但有时为了快速验证,外国同事非常喜欢发个 patch 包过来让我们做测试。这也是我第一次在工作中使用 diff 和 patch命令。 简单来讲,diff 命令可以用来创建一个差异文件,然后接收者可以使用 patch 命令将这部分差异代码应用到自己的代码里,达到协同开发的..

Free雅轩的博客 436

Git patch的使用方法和场景

diffapplyGit patch的使用方法和场景Git补丁在同步不同分支的代码时应用较多,且比较灵活,比如修复了的一个bug,同步到各个版本的发布分支。本文介绍两种生成和应用补丁的方案。

码点 4596
上一篇: 修改PHP+Apache上传文件大小限制
下一篇: Linux内核等待队列机制介绍(转载)
DigBug
博客等级 码龄20年 15粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值