首先,假設有兩個資料夾:
-baijuyi- [/home/Bachelor_91/linly/old] -13:48- ls
a.cc git
-baijuyi- [/home/Bachelor_91/linly/old] -13:48- cat a.cc
#include <iostream>
using namespace std;
int main()
{
a = 3;
}
-baijuyi- [/home/Bachelor_91/linly/new] -13:49- ls在兩個資料夾都有 a.cc 和 git,而 new 資料夾的 a.cc 檔案中,把 a = 3; 改成 b = 3;,現在要做 patch:
a.cc git
-baijuyi- [/home/Bachelor_91/linly/new] -13:49- cat a.cc
#include <iostream>
using namespace std;
int main()
{
b = 3;
}
-baijuyi- [/home/Bachelor_91/linly] -13:52- diff -ruN old/ new/ -x git > my.patch其中有一個參數:-x git,是省略這個檔案不比,有時候會有一些說明檔在裡頭,沒有必要去 patch 它。接著就是打 patch:
-baijuyi- [/home/Bachelor_91/linly] -13:53- cat my.patch
diff -ruN -x git old/a.cc new/a.cc
--- old/a.cc 2009-09-17 13:48:36.000000000 +0800
+++ new/a.cc 2009-09-17 13:48:04.000000000 +0800
@@ -4,5 +4,5 @@
int main()
{
- a = 3;
+ b = 3;
}
-baijuyi- [/home/Bachelor_91/linly] -13:59- patch -p0 < my.patch這樣就完成程式碼的更新了,如果說我到 old/ 這個資料夾打 patch 的話,由於是往下一層,所以要把 -p0 改成 -p1。最後,因為我的用 patch,它會幫我把原先的舊檔案,以原檔名加上 .orig,所以想把這些檔案都刪除的話,可以利用 find 去做:
-baijuyi- [/home/Bachelor_91/linly] -14:16- cat old/a.cc
using namespace std;
int main()
{
b = 3; // =>改變了
}
-baijuyi- [/home/Bachelor_91/linly] -14:03- ls old/
a.cc a.cc.orig git
-baijuyi- [/home/Bachelor_91/linly] -14:03- find . -name '*.orig' -exec rm -f {} ';'
-baijuyi- [/home/Bachelor_91/linly] -14:03- ls old/
a.cc git
3 則留言:
patch 另外有兩個可能用的到的參數:
1. -E:patch 的檔案為空就捨棄
2. -R:恢復 patch 前的狀態
如果是要協同開發,為什麼不直接用版本控制@@? 看到你資料夾名稱取 git 還以為你要用 git XD
用 patch 感覺看不到時間軸,用版本控制可以整個時間軸都出來,要發展新的 branch 也方便些,要針對個版本產生 patch 檔也很方便!!
那個 git 寫好玩的,哈哈!在我們這邊,有個「SI Team」會用 SVN+Trac 做版本控制,至於其它人就每周交 patch 給他們。
張貼留言