Chinaunix首页 | 论坛 | 博客
  • 博客访问: 849095
  • 博文数量: 143
  • 博客积分: 455
  • 博客等级: 一等列兵
  • 技术积分: 861
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-03 00:11
文章分类

全部博文(143)

文章存档

2018年(10)

2017年(6)

2016年(28)

2015年(14)

2014年(67)

2013年(1)

2012年(17)

我的朋友

分类: LINUX

2014-07-23 16:15:07

commit提交后,用git diff SHA-1 SHA-2 > my.patch,之后用patch -p1 < my.patch
即可将版本库上两次提交之间的不同之处做成一个patch,然后通过打补丁的方式提交到版本库上。

如果应用了某一个补丁之后想恢复原来的文件,那么使用参数 -R,例如:

1. 首先打了一个补丁

   $ patch -p1 < my.patch

2 然后想恢复原来的文件,那么

   $ patch -R -p1 < my.patch


如果要为多个文件制作补丁,那么可以使用 git 来快速生成,因为 git 是一个局部目录的库,所以不会有多余开销。

1.创建 git

   $ cd src

   $ git init

2.添加需要制作补丁的文件,或者全部添加

   $ git add * 

  或者 

   $ git add *.c

3. 提交原始文件

    $ git commit -a -m'init'

4. 修改源文件

   。。。

5. 创建补丁

    $ git diff > my.patch


两者配合时候可以合并、编辑以前的多个补丁文件,最后生成一个最新版本的补丁文件。

这样创建的补丁文件目录会自动增加一个前缀 a/ b/,例如

diff --git a/Makefile.in b/Makefile.in
index e548e99..c019753 100644
--- a/Makefile.in
+++ b/Makefile.in

这时候应用补丁的时候需要到包的根目录,使用 -p1 选项

$ patch -p1 < my.patch

如果不想在文件名前面增加前缀,那么使用选项 --no-prefix

$ git diff --no-prefix > my.patch

生成的补丁头如下,没有了文件目录的前缀

 diff --git Makefile.in Makefile.in
index e548e99..c019753 100644
--- Makefile.in
+++ Makefile.in 

用这个打补丁的时候就需要使用 -p0 选项

$ patch -p0 < my.patch

转载自:http://zhaojunde1976.blog.163.com/blog/static/1219986682012112011253540/

阅读(2921) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~