之前的这篇文章 git 导出差异 diff 文件 写了导出 diff 、patch 文件。

拿到 patch 文件,用 patch 命令可以快速的把修改内容合入,合入后在 git 上是已修改的状态,如需提交还要 add 、commit 。

patch 语法

patch --help 可以看到

Usage: patch [OPTION]... [ORIGFILE [PATCHFILE]]Input options:-p NUM  --strip=NUM  Strip NUM leading components from file names.-F LINES  --fuzz LINES  Set the fuzz factor to LINES for inexact matching.-l  --ignore-whitespace  Ignore white space changes between patch and input.-c  --context  Interpret the patch as a context difference.-e  --ed  Interpret the patch as an ed script.-n  --normal  Interpret the patch as a normal difference.-u  --unified  Interpret the patch as a unified difference.-N  --forward  Ignore patches that appear to be reversed or already applied.-R  --reverse  Assume patches were created with old and new files swapped.-i PATCHFILE  --input=PATCHFILE  Read patch from PATCHFILE instead of stdin.Output options:-o FILE  --output=FILE  Output patched files to FILE.-r FILE  --reject-file=FILE  Output rejects to FILE.-D NAME  --ifdef=NAME  Make merged if-then-else output using NAME.-m  --merge  Merge using conflict markers instead of creating reject files.-E  --remove-empty-files  Remove output files that are empty after patching.-Z  --set-utc  Set times of patched files, assuming diff uses UTC (GMT).-T  --set-time  Likewise, assuming local time.--quoting-style=WORD   output file names using quoting style WORD.Valid WORDs are: literal, shell, shell-always, c, escape.Default is taken from QUOTING_STYLE env variable, or 'shell' if unset.Backup and version control options:-b  --backup  Back up the original contents of each file.--backup-if-mismatch  Back up if the patch does not match exactly.--no-backup-if-mismatch  Back up mismatches only if otherwise requested.-V STYLE  --version-control=STYLE  Use STYLE version control.STYLE is either 'simple', 'numbered', or 'existing'.-B PREFIX  --prefix=PREFIX  Prepend PREFIX to backup file names.-Y PREFIX  --basename-prefix=PREFIX  Prepend PREFIX to backup file basenames.-z SUFFIX  --suffix=SUFFIX  Append SUFFIX to backup file names.-g NUM  --get=NUM  Get files from RCS etc. if positive; ask if negative.Miscellaneous options:-t  --batch  Ask no questions; skip bad-Prereq patches; assume reversed.-f  --force  Like -t, but ignore bad-Prereq patches, and assume unreversed.-s  --quiet  --silent  Work silently unless an error occurs.--verbose  Output extra information about the work being done.--dry-run  Do not actually change any files; just print what would happen.--posix  Conform to the POSIX standard.-d DIR  --directory=DIR  Change the working directory to DIR first.--reject-format=FORMAT  Create 'context' or 'unified' rejects.--binary  Read and write data in binary mode.--read-only=BEHAVIOR  How to handle read-only input files: 'ignore' that theyare read-only, 'warn' (default), or 'fail'.-v  --version  Output version info.--help  Output this help.Report bugs to <bug-patch@gnu.org>.

应用到打补丁上常用 patch -p1 < xxx.diff

示例

如 test_patch.diff 文件内容如下,

diff --git a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
index cb3348f7ab..a0c35bafa4 100755
--- a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -2602,6 +2602,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {@Overridepublic long interceptKeyBeforeDispatching(IBinder focusedToken, KeyEvent event,int policyFlags) {+        Log.d(TAG, "test_patch");final boolean keyguardOn = keyguardOn();final int keyCode = event.getKeyCode();final int repeatCount = event.getRepeatCount();

把 test_patch.diff 放在和 frameworks/ 同级别的目录下,

同级别目录

使用 patch -p1 < test_patch.diff 命令,提示

aaa@compilerbbb:~/ccc/ANDROID$ patch -p1 < test_patch.diff
patching file frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

说明打补丁完成,使用 git diff 看,是OK的。

子目录1

进入 frameworks/ 目录下,使用 patch -p1 < test_patch.diff 命令,提示

aaa@compilerbbb:~/ccc/ANDROID$/frameworks$ patch -p1 < ../test_patch.diff
can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
|index cb3348f7ab..a0c35bafa4 100755
|--- a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
|+++ b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
--------------------------
File to patch:

输入 base/services/core/java/com/android/server/policy/PhoneWindowManager.java 即可解决,

aaa@compilerbbb:~/ccc/ANDROID$/frameworks$ patch -p1 < ../test_patch.diff
can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
|index cb3348f7ab..a0c35bafa4 100755
|--- a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
|+++ b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
--------------------------
File to patch: base/services/core/java/com/android/server/policy/PhoneWindowManager.java
patching file base/services/core/java/com/android/server/policy/PhoneWindowManager.java

子目录2

子目录1 中,因为实际路径和 patch 文件路径有差异,需要手动输一下路径。

有没有不用输入路径的方法?有的,用 patch -p2 < ../test_patch.diff

aaa@compilerbbb:~/ccc/ANDROID$/frameworks$ patch -p2 < ../test_patch.diff
patching file base/services/core/java/com/android/server/policy/PhoneWindowManager.java
aaa@compilerbbb:~/ccc/ANDROID$/frameworks/base$ patch -p3 < ../../test_patch.diff
patching file services/core/java/com/android/server/policy/PhoneWindowManager.java

使用 patch 命令打补丁相关推荐

  1. 补丁分发 linux,patch 命令应用补丁

    patch 命令应用补丁 (1. 单个文件应用补丁 进入文件所在的目录并调用 patch 命令: patch < original.patch 这个命令需要源文件指定了参数  -u ,也就是讲, ...

  2. 学习patch命令打补丁,diff命令制作补丁

    patch:通过补丁文件,来对原文件打补丁 diff:      比较两个文件,然后生成一个补丁文件 1.patch用法    patch -p[剥离层级]  <[补丁文件] 2.patch命令 ...

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

    本文我们就来聊聊,怎么使用 diff 和 patch 命令进行协作开发. 之前我在公司上班的时候,需要经常跟外国同事一起协同开发(之前在外企上班).由于是异地协作,所以沟通几乎全部是通过邮件. 我们有 ...

  4. linux打patch和patch制作的方法(diff和patch命令)

    linux下常用的补丁命令有两个:diff和patch,diff用来制作补丁文件,patch用来给源文件打补丁. 一.diff命令 格式:$ diff [options] src_file dest_ ...

  5. diff与patch命令

    以下内容摘自:http://wiki.chinaunix.net/index.php/Linux%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8 diff 简单的说,diff的 ...

  6. 用diff命令制作补丁

    diff命令及常用选项 命令格式 diff [选项] old_file new_file 以上old_file 和new_file可以是文件,也可以是文件夹. 常用选项 选项 说明 -r 递归比较各子 ...

  7. 容器编排技术 -- Kubernetes kubectl patch 命令详解

    容器编排技术 -- Kubernetes kubectl patch 命令详解 1 kubectl patch 2 语法 3 示例 4 Flags kubectl patch 使用(patch)补丁修 ...

  8. matlab中patch是什么意思,Linux中patch命令起什么作用呢?

    摘要: 下文讲述Linux中patch命令的功能说明,如下所示: patch命令功能: 可修复,修改,更新原始文件 patch常用于修复linux内核文件 patch命令的语法格式: patch [参 ...

  9. Linux 文件管理 : patch 命令详解

    patch命令被用于为开放源代码软件安装补丁程序.让用户利用设置修补文件的方式,修改,更新原始文件.如果一次仅修改一个文件,可直接在命令列中下达指令依序执行.如果配合修补文件的方式则能一次修补大批文件 ...

最新文章

  1. python学起来难不难-自学Python很难吗,为何会看不进去!
  2. 借助Spring站点开始一个spring项目
  3. 所谓的中间代码(ES5 的 “JSIL”)
  4. MySQL-[Err] 1055 - Expression #1
  5. ad用户和计算机报错,AD常用排错工具
  6. PS教程第十九课:移动工具
  7. mysql批量删除进程_小程序批量删除云数据库里的数据
  8. illegal utf8 encoding at (190)
  9. poj 2828 线段树
  10. MarkDown学习指南(一)
  11. 在部署服务器端的时候postgresql调试和远程连接操作需要考虑好远程连接问题。
  12. Java模拟文件管理器
  13. 一篇SCI论文最快多久能完成?
  14. 计算机的内存大小有何作用,电脑内存用处有多大?你可能想不到!
  15. 丘成桐:数理与人文(官方完整版PDF下载)(公号回复“丘成桐数学”下载PDF典型资料,欢迎转发、赞赏支持科普)
  16. NEO主要技术社区成员大曝光
  17. AI解梦成为现实 未来还有无限可能道翰天琼认知智能机器人平台API接口大脑为您揭秘
  18. 解决「问题」,不要解决问题
  19. 信息中心网络ICN在卫星通信中的应用调研
  20. MySQL 中 CONCAT 函数使用

热门文章

  1. 华为南研所2015年面试经历总结
  2. 制作动图简易软件(附下载方式)
  3. 词性、句法分析、依存关系的符号解释
  4. 用浏览器收藏夹的书签保存javascript的简单脚本
  5. COMSOL 专题学习
  6. kubeflow--安装使用pipeline
  7. 精雕细琢见真章《STM32Cube高效开发教程》
  8. 南工院计算机答辩,人工智能与计算机学院举行“智能之星”评选答辩会
  9. Git的稀疏检出功能
  10. 数据库启动时遇到ORA-03113: 通信通道的文件结尾