1.create patch
使用create patch可以生成一個或者多個修改過的文件和當前版本差異的patch(支持目錄樹)
通常情況下,create patch將修改保存為.patch或.diff文件
可以將.patch或.diff文件的內容復制出來,發給需要審查的人
.patch或.diff文件中記錄了發生這個patch的版本號以及具體修改的內容
針對某個文件或某幾個文件的若干種修改,可以生成多個.patch或.diff文件
2.apply patch
可以將.patch或.diff文件應用到對應版本的項目,就像打補丁一樣
同一個項目/文件夾下,可以選擇應用需要的patch
通常來說,應用一個patch時文件版本和生成這個patch時文件的版本是一致的;如果不一致,也可以強制應用,svn會自動進行diff(這時候需要手動合并)
linux下,可以使用系統的patch命令來應用patch,eg: patch -p0 <xxx.patch
3.使用
暫時不需要提交或不允許提交的修改,可以選擇create patch來保存修改的內容
選擇create patch來保存修改的內容并且提交patch,通過審查后,(在服務器端)應用patch
當一個功能有多種解決方案時,可以生成多個patch,(提交后)分別經過測試,再決定應用哪個patch
多個功能分別需要改同一個文件的不同地方(即沒有同一行),可以做成多個patch,應用patch的順序沒有要求(在linux下應用也一樣成功,只是會生成多個.orig文件)
多個連續性的功能,他們修改的文件都與一個base作patch,例:p1在v1的基礎上開發v2,生成v2和v1之間的patch1;p2在v2的基礎上開發v3,生成v3和v1之間的patch2,這樣只要應用patch2也就應用了patch1。
4.帶來的問題
一個較早的patch,在經過多輪提交后,如果想再要應用,需要嚴格的diff
如果兩個patch分別改了同一行代碼,應用第一個patch后要再應用第二個patch時,仍然需要diff。如果在linux下,會產生沖突,生成.orig和.rej兩個文件(此時仍然需要手動進行比較合并)
第3部分提到的連續性,要準確的預見到,比較困難
第3部分提到的多個連續的功能,后做的功能的某個文件更新了先做的功能的內容,但先做的功能可能還涉及到其他文件,容易造成漏更新文件的情況