使用 patch 命令打补丁
之前的这篇文章 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 命令打补丁相关推荐
- 补丁分发 linux,patch 命令应用补丁
patch 命令应用补丁 (1. 单个文件应用补丁 进入文件所在的目录并调用 patch 命令: patch < original.patch 这个命令需要源文件指定了参数 -u ,也就是讲, ...
- 学习patch命令打补丁,diff命令制作补丁
patch:通过补丁文件,来对原文件打补丁 diff: 比较两个文件,然后生成一个补丁文件 1.patch用法 patch -p[剥离层级] <[补丁文件] 2.patch命令 ...
- 学会使用 diff 和 patch 命令协同开发
本文我们就来聊聊,怎么使用 diff 和 patch 命令进行协作开发. 之前我在公司上班的时候,需要经常跟外国同事一起协同开发(之前在外企上班).由于是异地协作,所以沟通几乎全部是通过邮件. 我们有 ...
- linux打patch和patch制作的方法(diff和patch命令)
linux下常用的补丁命令有两个:diff和patch,diff用来制作补丁文件,patch用来给源文件打补丁. 一.diff命令 格式:$ diff [options] src_file dest_ ...
- diff与patch命令
以下内容摘自:http://wiki.chinaunix.net/index.php/Linux%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8 diff 简单的说,diff的 ...
- 用diff命令制作补丁
diff命令及常用选项 命令格式 diff [选项] old_file new_file 以上old_file 和new_file可以是文件,也可以是文件夹. 常用选项 选项 说明 -r 递归比较各子 ...
- 容器编排技术 -- Kubernetes kubectl patch 命令详解
容器编排技术 -- Kubernetes kubectl patch 命令详解 1 kubectl patch 2 语法 3 示例 4 Flags kubectl patch 使用(patch)补丁修 ...
- matlab中patch是什么意思,Linux中patch命令起什么作用呢?
摘要: 下文讲述Linux中patch命令的功能说明,如下所示: patch命令功能: 可修复,修改,更新原始文件 patch常用于修复linux内核文件 patch命令的语法格式: patch [参 ...
- Linux 文件管理 : patch 命令详解
patch命令被用于为开放源代码软件安装补丁程序.让用户利用设置修补文件的方式,修改,更新原始文件.如果一次仅修改一个文件,可直接在命令列中下达指令依序执行.如果配合修补文件的方式则能一次修补大批文件 ...
最新文章
- python学起来难不难-自学Python很难吗,为何会看不进去!
- 借助Spring站点开始一个spring项目
- 所谓的中间代码(ES5 的 “JSIL”)
- MySQL-[Err] 1055 - Expression #1
- ad用户和计算机报错,AD常用排错工具
- PS教程第十九课:移动工具
- mysql批量删除进程_小程序批量删除云数据库里的数据
- illegal utf8 encoding at (190)
- poj 2828 线段树
- MarkDown学习指南(一)
- 在部署服务器端的时候postgresql调试和远程连接操作需要考虑好远程连接问题。
- Java模拟文件管理器
- 一篇SCI论文最快多久能完成?
- 计算机的内存大小有何作用,电脑内存用处有多大?你可能想不到!
- 丘成桐:数理与人文(官方完整版PDF下载)(公号回复“丘成桐数学”下载PDF典型资料,欢迎转发、赞赏支持科普)
- NEO主要技术社区成员大曝光
- AI解梦成为现实 未来还有无限可能道翰天琼认知智能机器人平台API接口大脑为您揭秘
- 解决「问题」,不要解决问题
- 信息中心网络ICN在卫星通信中的应用调研
- MySQL 中 CONCAT 函数使用