git补丁和 一般的补丁

---------------------------------------------------------------------------------------------------------

git方式的补丁:http://www.cnblogs.com/y041039/articles/2411600.html
http://blog.csdn.net/sunnylgz/article/details/7661920

1使用git format-patch生成所需要的patch:
git branch PATCH
git checkout PATCH
//然后修改自己的源码.
git commit -a -m "Fix1"
git format-patch -M master  // 当前分支所有超前master的提交: git format-patch生成的补丁文件默认从1开始顺序编号,并使用对应提交信息中的第一行作为文件名。如果使用了-- numbered-files选项,则文件名只有编号,不包含提交信息;如果指定了--stdout选项,可指定输出位置,如当所有patch输出到一个文件;可指定-o <dir>指定patch的存放目录;

方法2:某次提交以后的所有patch(不包含本次提交4e16): git format-patch 4e16
末次提交的补丁:git format-patch -1 07fe
git log --pretty=oneline

2应用patch:
git branch PATCH
git checkout PATCH

git apply --stat newpatch.patch  //先检查patch文件:
git apply --check  newpatch.patch  //检查能否应用成功:
git am 0001-Fix1.patch  //git am --signoff < newpatch.patch(使用-s或--signoff选项,可以commit信息中加入Signed-off-by信息)
git commit -a -m "PATCH apply"
git checkout master

git merge patch


如果应用patch出现问题:参考git am PATCH 失败的处理方法http://blog.csdn.net/sunnylgz/article/details/7660638

git-format-patch(1) - Linux man page http://linux.die.net/man/1/git-format-patch

How to create and apply a patch with Git http://ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git





---------------------------------------------------------------------------------------------------------

做补丁:diff -Naurp --exclude='.svn' orig.dir new.dir > dest.patch
 
做补丁:diff -Naurp orig.dir new.dir > dest.patch
打补丁: cd orig.dir
       patch -p1 < ../dest.patch
 
我对DebianPackage-1.0修改,改后为DebianPackage-1.1
打包时要先清除编译生成的文件,运行debclean
#cd ~/DebianPackage-1.0
#debclean
#cd ~/DebianPackage-1.1
#debclean
#cd
#diff -Naurp DebianPackage-1.0 DebianPackage-1.1 > DebianPackage-1.1.patch
 
打补丁:
a
#cd DebianPackage-1.0
#patch -p1 < ../DebianPackage-1.1.patch
b
#patch -p2 -d DebianPackage-1.0 < DebianPackage-1.1.patch

转:

通过diff工具生成补丁, patch工具打上补丁.

在使用diff之前, 你需要保留一份未修改过的源码, 然后在其它地方修改源码的一份拷贝. diff对比这两份源码生成patch. 修改过的源码必须保留原来的文件名, 例如, 如果你修改源码中的a.c文件, 那么, 修改后的文件还是名为a.c, 在修改之前你可以复制a.c为a.orig.c进行备份.

diff命令必须在整个Linux源码的根目录的上一级目录中执行.

1. 为单个文件生成补丁

diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c linux-2.6.28.8/net/sunrpc/svc.c

这条命令会产生类似如下的输出, 你将它重定向到一个文件中, 这个文件就是patch.

--- linux-2.6.28.8/net/sunrpc/svc.orig.c 2009-03-17 08:50:04.000000000 +0800

+++ linux-2.6.28.8/net/sunrpc/svc.c 2009-03-30 19:18:41.859375000 +0800

@@ -1050,11 +1050,11 @@ svc_process(struct svc_rqst *rqstp)

参数详解:

-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/两个目录的源码差异. 不像只需要单个文件, 如果修改多个文件, 那么就需要拷贝整个Linux源码树.

参数详解:

-r 递归地对比一个目录和它的所有子目录(即整个目录树).

-N 如果某个文件缺少了, 就当作是空文件来对比. 如果不使用本选项, 当diff发现旧代码或者新代码缺少文件时, 只简单的提示缺少文件. 如果使用本选项, 会将新添加的文件全新打印出来作为新增的部分.

3. 打补丁

生成的补丁中, 路径信息包含了你的Linux源码根目录的名称, 但其他人的源码根目录可能是其它名字, 所以, 打补丁时, 要进入你的Linux源码根目录, 并且告诉patch工具, 请忽略补丁中的路径的第一级目录(参数-p1).

patch -p1 < patch1.diff

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值