情景一:你正尝试从代码编译一个软件包,发现有人已经对代码进行了小小的修改以便在你的系统上编译。他们通过补丁的方式发布自己的成果,但是你却不知道该如何使用它。答案是你使用一个叫做patch(很贴切)的命令行工具将补丁应用到原始代码上。
情景二:你下载了一个开源软件包的代码,花了一个小时左右稍作修改,成功的让它在你的系统上编译通过。你想把自己的成果分享给其他程序员,或者给软件包的作者。现在你就需要创建自己的补丁,你需要的工具是diff。
这是一份diff和patch的快速指南,通过讲解它们最常见的用法来帮你解决上面问题。它告诉你的东西足够让你立刻开始使用。之后,你可以在闲暇的时候用manpage来学习diff和patch的前前后后。我总是乐意听到你们的问题和意见。用联系表单跟我取得联系。
用patch命令应用补丁
要对单个文件应用补丁,进入文件所在的目录并调用patch命令:
patch < foo.patch
这些命令假定补丁是以统一格式分发的,这种格式指明了补丁要应用到的文件。如果不是,你可以在命令行里指定文件:
patch foo.txt < bar.patch
应用补丁到整个目录(这种情况也许更常见)也是类似的,但是你必须注意设置p级别。就是说,在补丁文件里,需要打补丁的文件在你电脑上的路径名跟
在创建补丁的电脑上可能不同。p级别告诉patch命令忽略掉路径名的几个部分以正确的识别文件。通常p级别为1就够了,所以你使用:
patch -p1 < bar.patch
运行该命令之前,你应该进入源代码目录的顶层目录。如果补丁级别1不能正确识别任何需要打补丁的文件,检查补丁文件里的文件名。如果你看到这样一个文件名:
/users/stephen/package/src/net/http.c
而你当前正工作在一个包含net/http.c的目录,使用:
patch -p5 < bar.patch
总的来说,对于从路径最开始删除的每个路径分隔符(斜线字符)加一,直到剩下的部分存在于你的工作目录中。最后得到的就是p级别。
要删除补丁,用-R参数,例如:
patch -p5 -R bar.patch
使用diff创建补丁
不论是对于单个文件还是整个源码目录,使用diff都很简单。为单个文件创建补丁,用下面形式:
diff -u original.c new.c > original.patch
为整个源码树创建补丁,复制一份源码树:
cp -R original new
在目录new/里进行必要的修改,然后用下面的命令创建补丁:
diff -rupN original/ new/ > original.patch
这就是diff和patch入门需要的所有知识。要获得更多的信息用:
man diff
man patch
分享到:
相关推荐
windows可用的diff和patch可执行文件,用于比较文件、生成补丁和应用补丁。用于一键给多个源文件加指定代码。比如应用systemview时需要对FreeRTOS进行的很多更改,参见...
在IT行业中,`diff`和`patch`是两个非常重要的工具,主要用于版本控制和软件更新。它们在源码管理和软件开发领域中起着至关重要的作用。`diff`用于比较两个文件或目录的差异,而`patch`则用来应用这些差异,从而更新...
Python-DiffMatchPatch库是专为处理纯文本而设计的高性能工具,它广泛应用于文本比较、合并和补丁应用等领域。这个库源自Google的一个开源项目,最初由Jonhnson Lee编写,现在支持多种编程语言,包括Python。在...
要对文本文件的进行比较的时候,可以考虑使用google-diff-match-patch,它可以进行比较、匹配和生成补丁的操作 google-diff-match-patch这个类库提供了强大的算法用于纯文本内容的差异比较,匹配,打补丁,实现...
1) 在数学上来说:diff/patch,diff是对2个集合求差,patch是求和 diff A B >C ,一般A是原始文件,B是修改后的文件,C称为A的补丁文件。 patch A C 就能得到B, 这一步叫做对A打上了B的名字为C的补丁。 patch ...
diff_match_patch java资源库,方便文件之间求差异,和根据差异推算出新的文件,主要用于增量更新
Go-Godiff是Google的diff-match-patch库在Go语言中的移植版本,它提供了一套高效、精确的文本差异计算和合并工具。diff-match-patch库最初由Google工程师Neal Walfield编写,主要用于处理字符串级别的差异比较,广泛...
Linux diff和patch是GNU Diffutils软件包的一部分,这些工具用于展示、比较和合并文件的差异。了解diff的原理和使用方式,可以帮助用户有效地管理和同步文件更改。diff命令可以比较文件之间的差异,并以多种格式输出...
diff-match-patch是一个开源的算法库,它提供了文本差异计算、匹配和补丁应用的功能。这个库在多个编程语言中都有实现,包括C#、Java、Maven、Python(2.x和3.x)、JavaScript、Objective-C、C++以及Lua,这使得它在...
前端HTML内容差异比较diff-match-patch.js
谷歌的diff_match_patch库是一个强大的工具,主要用于处理文本的比较、匹配和补丁生成。这个库的核心功能在于高效地计算两个文本之间的差异,并提供合并和应用补丁的能力。在本篇文章中,我们将深入探讨这个库的功能...
这个库的核心算法由Peter Norvig设计,其主要包含三个关键部分:diff、match和patch。 1. **diff**:这部分负责计算两个文本的差异。通过使用一种叫做"Longest Common Subsequence"(最长公共子序列)的算法,diff...
shell常用命令—diff和patch1. diff用法2. diff比较目录3. patch用法 1. diff用法 diff file1 fil2 以后面的文件file2作为标准 比较file1相对于file2来说有什么不同 < 表示第一个文件中的内容 > 表示第二个文件...
在Linux和Unix环境中,Shell命令是用户与操作系统交互的基础工具,其中`diff`和`patch`是两个非常实用的命令,主要用于文件和目录的比较以及应用补丁。这两个命令在软件开发、版本控制以及系统维护中起着至关重要的...
diff-match-patch是一个开源的JavaScript库,由Google工程师Kevin Decker开发,主要用于处理文本的差异比较、匹配和补丁应用。这个库的核心功能在于其高效地计算两个文本之间的差异,并生成可应用的补丁,从而实现...
1) 在数学上来说:diff/patch,diff是对2个集合求差,patch是求和 diff A B >C ,一般A是原始文件,B是修改后的文件,C称为A的补丁文件。 patch A C 就能得到B, 这一步叫做对A打上了B的名字为C的补丁。 patch ...
补丁方法:将原始的armboot程序包armboot-1.1.0.tgz 解开后,将armboot-org2mini2440.diff文件放到和armboot-1.1.0的同级目录上,不要拷贝到 armboot-1.1.0 目录里面, 进到 armboot-1.1.0 执行如下的patch命令即可...
这里提到的“bc、diff、patch、iperf、sshpass”是一组常用且功能各异的开源工具,它们在不同的场景下有着重要的作用。让我们逐一深入探讨这些工具的详细知识。 **bc**: BC 是一个交互式的、高度可移植的编程语言,...
### Linux初学者Patch使用指南详解 #### 一、Patch简介及历史背景 Patch是一种用于比较两个文件或目录之间差异,并将这些差异应用到另一个文件或目录中的工具。它最初是在网络带宽有限的时代被广泛采用的,目的是...