有幾種常見做diff和patch的方法
1. 使用大家最愛的git
matthew@E6430:~/temp$ git log
commit 406400903bc059bedfee59b11d60f7375818a21b
Author: Matthew.Shyu
Date: Fri Aug 29 19:59:47 2014 +0800
add hello world
commit 619ff93b9c08a2c63d433bd67de2f4051046332f
Author: Matthew.Shyu
Date: Fri Aug 29 19:59:09 2014 +0800
initial commit
例如要為"add hello world"這個commit做一個patch file的時候
可以使用如下的命令
$ git format-patch 406400903bc059bedfee59b11d60f7375818a21b -1
-1 代表往前一個commit的意思
要apply patch的時候就可以
$ git apply 0001-add-hello-world.patch
或者
$ git am 0001-add-hello-world.patch
這兩個的差別在於
第一個命令只是將patch的內容加上去並不會進行commit
所以在workspace上只是以unstaging change的形式存在
第二個命令就直接將patch進行commit到log裡
2. 使用quilt
quilt是一個patch管理程式
在Debian/Ubuntu上可以使用
$ apt-get install quilt
來安裝
我們首先在source code的根目錄產生一個patches目錄
$ mkdir patches
然後新增一個patch
$ quilt new hello-world.patch
再來是將需要修改的file加到quilt中
有兩個作法
$ quilt add test.c
或直接
$ quilt edit test.c
第二個作法是將test.c加到quilt中
並使用預設的編輯器對test.c進行編輯
當改好後
$ quilt refresh
就可以檢查patches/裡的patch是否正確
如果不再修改了
則使用
$ quilt pop
這時候被修改的文件會恢復成原狀
如果要再度修改
$ quilt push hello-world.patch
3. 古老的diff/patch法
使用
$ diff -purN <orig> <new> > hello-world.patch
$ patch -p0 < hello-world.patch
p0代表不rip directory
p1代表去除一層directory
依此類推
沒有留言:
張貼留言