`

diff和patch使用指南

 
阅读更多
diff和patch使用指南

  diff和patch是一对工具,在数学上来说,diff是对两个集合的差运算,patch是对两个集合的和运算。

  diff比较两个文件或文件集合的差异,并记录下来,生成一个diff文件,这也是我们常说的patch文件,即补丁文件。

  patch能将diff文件运用于 原来的两个集合之一,从而得到另一个集合。举个例子来说文件A和文件B,经过diff之后生成了补丁文件C,那么着个过程相当于 A -B = C ,那么patch的过程就是B+C = A 或A-C =B。

  因此我们只要能得到A, B, C三个文件中的任何两个,就能用diff和patch这对工具生成另外一个文件。

  这就是diff和patch的妙处。下面分别介绍一下两个工具的用法:

  1. diff的用法

  diff后面可以接两个文件名或两个目录名。 如果是一个目录名加一个文件名,那么只作用在那么个目录下的同名文件。

  如果是两个目录的话,作用于该目录下的所有文件,不递归。如果我们希望递归执行,需要使用-r参数。

  命令diff A B >C ,一般A是原始文件,B是修改后的文件,C称为A的补丁文件。

  不加任何参数生成的diff文件格式是一种简单的格式,这种格式只标出了不一样的行数和内容。我们需要一种更详细的格式,可以标识出不同之处的上下文环境,这样更有利于提高patch命令的识别能力。这个时候可以用-c开关。

  2. patch的用法

  patch用于根据原文件和补丁文件生成目标文件。还是拿上个例子来说

  patch A C 就能得到B, 这一步叫做对A打上了B的名字为C的补丁。

  之一步之后,你的文件A就变成了文件B。如果你打完补丁之后想恢复到A怎么办呢?

  patch -R B C 就可以重新还原到A了。

  所以不用担心会失去A的问题。

  其实patch在具体使用的时候是不用指定原文件的,因为补丁文件中都已经记载了原文件的路径和名称。patch足够聪明可以认出来。但是有时候会有点小问题。比如一般对两个目录diff的时候可能已经包含了原目录的名字,但是我们打补丁的时候会进入到目录中再使用patch,着个时候就需要你告诉 patch命令怎么处理补丁文件中的路径。可以利用-pn开关,告诉patch命令忽略的路径分隔符的个数。举例如下:

  A文件在 DIR_A下,修改后的B文件在DIR_B下,一般DIR_A和DIR_B在同一级目录。我们为了对整个目录下的所有文件一次性diff,我们一般会到DIR_A和DIR_B的父目录下执行以下命令

  diff -rc DIR_A DIR_B >C

  这个时候补丁文件C中会记录了原始文件的路径为 DIR_A/A

  现在另一个用户得到了A文件和C文件,其中A文件所在的目录也是DIR_A。 一般,他会比较喜欢在DIR_A目录下面进行patch操作,它会执行

  patch

  但是这个时候patch分析C文件中的记录,认为原始文件是./DIR_A/A,但实际上是./A,此时patch会找不到原始文件。为了避免这种情况我们可以使用-p1参数如下

  patch -p1

  此时,patch会忽略掉第1个”/”之前的内容,认为原始文件是 ./A,这样就正确了。

  最后有以下几点注意:

  1. 一次打多个patch的话,一般这些patch有先后顺序,得按次序打才行。

  2. 在patch之前不要对原文件进行任何修改

  3. 如果patch中记录的原始文件和你得到的原始文件版本不匹配(很容易出现),那么你可以尝试使用patch, 如果幸运的话,可以成功。大部分情况下,会有不匹配的情况,此时patch会生成rej文件,记录失败的地方,你可以手工修改。
分享到:
评论

相关推荐

    Linux初学者Patch使用指南

    ### Linux初学者Patch使用指南详解 #### 一、Patch简介及历史背景 Patch是一种用于比较两个文件或目录之间差异,并将这些差异应用到另一个文件或目录中的工具。它最初是在网络带宽有限的时代被广泛采用的,目的是...

    diff-match-patch.rs:用于生锈的diff-match-patch

    - `README.md`: 项目简介和使用指南,可能包括安装、使用方法以及 API 文档等。 在实际使用 `diff-match-patch.rs` 时,开发者可以通过以下步骤进行操作: 1. **安装**:通过 Cargo(Rust 的包管理器)添加依赖,...

    svn安装与patch文件应用

    - **生成Patch文件**: 使用 `TortoiseSVN` 的 `Export` 功能导出文件夹,然后使用 `Diff` 工具对比两个版本之间的差异。 - **应用Patch文件**: 使用 `TortoiseSVN` 的 `Apply Patch` 功能将差异应用到目标文件夹。 ...

    ubuntu Ltib Patch

    6. **错误修复**:patch可能解决了在Ubuntu上使用ltib时遇到的特定错误或崩溃,提升了整体的稳定性和可靠性。 7. **性能优化**:补丁可能针对Ubuntu环境进行了性能优化,如编译速度提升,内存使用优化等。 8. **新...

    IOS开发环境windows化攻略_代码附件.zip

    首先,`diff2win.bat`和`winpatch.bat`是两个批处理文件,它们分别用于在Windows系统下处理Unix风格的diff和patch文件。在Unix/Linux系统中,行尾通常是'\n',而在Windows中,行尾是'\r\n'。这两个脚本的作用就是...

    LINUX与UNIX SHELL编程指南.zip

    第三部分,会深入到UNIX命令的使用,涵盖诸如ls、cd、cp、mv、rm、mkdir、rmdir、grep、find、sed、awk等基础命令,以及更复杂的命令如tar、make、diff和patch等。理解并熟练运用这些命令,能帮助用户更好地管理和...

    MT8788 ANDROID11 支持MT7663完整patch

    对于那些使用搭载MT8788处理器并且想要升级到Android 11的用户来说,这个patch集合是必不可少的,因为它确保了硬件驱动的兼容性和系统的良好运行。安装这些补丁通常需要一定的技术知识,用户需要按照指示或社区提供...

    j-sim补丁patch1.3-4.tar

    3. 阅读README-patch1.3-4.txt,了解补丁的详细信息和应用指南。 4. 如果存在script文件,按照脚本的指示运行,它会自动合并源代码更改。 5. 如果没有自动脚本,你需要手动将src目录中的更改合并到你的j-sim源代码中...

    TextModelAnalyze:文本模板解析工具,基于 google-diff-match-patch 开发

    TextModelAnalyze是一款文本模板解析工具,其核心是利用了Google的开源库...通过理解和掌握TextModelAnalyze及其依赖的diff-match-patch库,开发者可以在Java项目中实现高效的文本处理,提升软件的灵活性和可维护性。

    linux运维.doc

    Linux运维云计算服务器管理指南 ...我们学习了 Linux 服务器类型、网络配置、Apache 服务器安装、RPM 包管理、Yum 软件管理、sed 高级用法、Trap 信号处理、文件管理、diff 和 patch 命令等方面的内容。

    Linux与unix shell编程指南

    读者将学习如何利用正则表达式进行文本匹配,如何使用Perl和Python等语言进行更复杂的文本操作,以及如何结合其他工具如diff和patch进行文件比较和修改。 第五部分,系统管理篇,虽然篇幅较小,但包含了若干与系统...

    高级 Linux 命令精通指南

    除此之外,还有一些其他高级命令,如`find`用于查找文件,`grep`用于搜索文件内容,`sed`和`awk`用于文本处理,以及`diff`和`patch`用于比较和合并文件差异。这些命令的熟练使用能够大大提高日常系统维护和故障排查...

    Delphi 12 控件之R121.patch1.zip

    总的来说,"R121.patch1.zip"这个压缩包对于使用Delphi 12进行开发的用户来说是非常重要的,它可能带来了控件功能的增强或错误的修复,有助于提高开发效率和用户体验。如果遇到相关问题,及时应用这样的补丁是非常...

    LINUX与UNIX SHELL编程指南

    第四部分,UNIX文字处理,主要涵盖文本处理工具,如cat、more、less、tr、cut、paste、join、sort、uniq、diff、patch等,以及正则表达式在文本搜索和替换中的应用。这些工具在数据处理和日志分析中具有重要作用。 ...

    git权威指南第二版 (超级高清)

    尽管处于“史前时代”,但开发者们已经开始尝试使用一些基本的工具来简化工作流程,比如`diff`和`patch`。 - **`diff`**:这是一个用于比较两个文本文件或目录差异的强大工具。它可以帮助开发者识别出文件之间的...

    js代码-关键词屏蔽diff

    在这个场景下,可能包含了`main.js`代码的简要介绍、如何引入和使用`diff_match_patch`库,以及关键词屏蔽功能的具体应用示例。 总结来说,关键词屏蔽是通过检查和处理文本中的敏感词汇来确保内容安全的一种方法。...

    enigma_cd_dvd_info_diff.zip_Enigma

    标题 "enigma_cd_dvd_info_diff.zip_Enigma" 暗示了这是一...具体操作可能涉及使用特定的软件工具,如补丁应用器,或者手动覆盖原有文件。在处理此类文件时,确保备份原有内容以免丢失数据,并遵循提供的任何安装指南。

    Algorithm-gonp.zip

    - `gonp-master`可能是一个Git仓库的克隆,其中可能包含`src`目录,存储着源代码,`test`目录用于存放测试用例,`doc`目录可能包含算法的文档说明,以及`README.md`等文件提供项目介绍和使用指南。 - `main.go`...

Global site tag (gtag.js) - Google Analytics