patchgit patch使用经验

xiaoxiao2021-02-28  16

 生成patch的方法      1. 使用linux下的diff命令 1.为单个文件生成补丁 $ diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c linux-2.6.28.8/net/sunrpc/svc.c > patch -u 显示有差异行的前后几行(上下文), 默认是前后各3行, 这样, patch中带有更多的信息. -p 显示代码所在的c函数的信息.  2.为多个文件生成补丁 $ diff -uprN linux-2.6.28.8.orig/net/sunrpc/ linux-2.6.28.8/net/sunrpc/ 这条命令对比了linux-2.6.28.8.orig/net/sunrpc/和linux-2.6.28.8/net/sunrpc/两个目录下的所有源码差异. 参数详解: -r 递归地对比一个目录和它的所有子目录(即整个目录树). -N 如果某个文件缺少了, 就当作是空文件来对比. 如果不使用本选项, 当diff发现旧代码或者新代码缺少文件时, 只简单的提示缺少文件. 如果使用本选项, 会将新添加的文件全新打印出来作为新增的部分. 3 打patch  生成的补丁中, 路径信息包含了你的Linux源码根目录的名称, 但其他人的源码根目录可能是其它名字, 所以, 打补丁时, 要进入你的Linux源码根目录, 并且告诉patch工具, 请忽略补丁中的路径的第一级目录(参数-p1). $ patch -p1 < patch1.diff diff命令必须在整个Linux源码的根目录的上一级目录中执行. 【注】        p0表示当前路径,p1表示忽略第一个路径,例如 在 home/share路径下,执行patch,而patch是share/ubuntu/file/1.c 。p1表示忽略share目录。        如果用git diff生成的patch,使用patch打上时,有所不同,还需要做测试 4 示例 给修改过的内核生成patch,然后用生成的patch给未修改过的内核打补丁 其中,目录linux-2.6.31.3为未修改过的内核,目录linux-2.6.31.3_1为修改过的内核 $ diff -uparN linux-2.6.31.3 linux-2.6.31.3_1/ > mypatch$ cd linux-2.6.31.3$ patch -p1 < mypatch 【注】:          1. 用diff工具不能对两个独立的文件同时生成一个patch,例如: diff 1.c 2.c > file.diff           该命令会将2.c当作1.c的差异。            2. 已经打过的patch,用同样的命令,则会还原patch,若要严格指定打or还原patch         严格指定打patch           # patch -Np0 < foo.patch         严格指定还原patch       # patch -Rp0 < foo.patch 【2】 git 生成patch和使用patch 方式 1:        使用git diff命令 git diff > patch git diff --cached > patch git diff branchname --cached > patch 打patch git apply patch git apply 是一个事务性操作的命令,也就是说,要么所有补丁都打上去,要么全部放弃 用以下命令检查patch是否可以顺利打上 git apply --check <patch> 方式2   git format-patch 命令 1)两个节点之间的提交: git format-patch 节点A 节点B 2)单个节点: git format-patch -1 节点A (-n就表示要生成几个节点的提交) 3)最近一次提交节点的patch git format-patch HEAD^ 依次类推… 使用git format-patch命令生成的patch文件,包含了提交的附加信息:比如作者,时间等 打patch git am <PATCH> 再次基础上使用git am命令即可将此补丁应用到当前分支。注意应用完之后,你会发现当前分支多了一次提交记录,并且有完整的信息,而不是简单的修改文件。在对比一下,git diff 和git format-patch生成的patch一个重要不同之处,实际使用中会发现git diff一次只会生成一个patch文件,不管差别了多少个提交,都是一个;而git format-patch是根据提交的节点来的,一个节点一个patch。  补充小技巧:  如果有额外信息需要补充,但又不想放在提交消息中说明以免搞乱了提交说明。可以编辑这些补丁文件,在第一个“---” 行之前添加说明即可。这样的信息能阅读,但在执行完git am命令之后该节点的提交信息不回包含上述信息 本地代码与服务器代码有冲突,导致代码无法提交入库      使用git format-patch -1 (-1是指将上一笔,也可以-1 + commit id) 将提交做成patch      使用git reset 将本地代码回退到之前的版本。      重新git pull到最新代码      使用git am + patch 将之前提交重新合入,此时使用git log可以看到提交      repo upload .重新提交 参考:  git am PATCH 失败的处理方法 http://blog.csdn.net/sunnylgz/article/details/7660638 git 生成patch和使用patch http://blog.csdn.net/maybe_windleave/article/details/8703778
转载请注明原文地址: https://www.6miu.com/read-1250177.html

最新回复(0)