Developer 會在 mail list 上發 patch 出來,而 Maintainer 會把這些 patches 整合起
個,做好 review 再一個一個 commit 上 mainstream 之中。而當 Patch 的量很大,而又>有相依性之時…
一個 Open Source Project 的 Maintainer 要如何管理這些 Patch 呢?
[Quilt]就是這樣的一個好用的工具。
假設今天你在 maintain 一個案子,叫 ”mypro“ 放在 /work/mypro 底下而你拿到了 5 個
patches
001_ooxx.patch
002_lalal.patch
003_lele.patch
004_bad.patch
005_conflict.patch
你可以在 /work/mypro/ 下建立一個 patches 的目錄 (如果想自已指定請 export QUILT_PATCHES="....")
把 patches 放在 /work/mypro/patches 之中
再建一個檔案 /work/mypro/patches/series 把這五個patches 依序寫入 series 中,一行一個 patch, 如果有base 目錄不同的問題 (quilt default 是打 patch -p1) 可在後面加上 -p
假設 003_lele.patch 這個 patch 是在 /work/mypro 下用 svn diff > 003_lele.patch 做出來的, 那在 series 之中就要寫成:
003_lele.patch -p0
所以 series 就會變成
---------------------
002_lalal.patch
003_lele.patch -p0
004_bad.patch
005_conflict.patch
---------------------
如此設好之後,就可以用 "quilt push" 打 patch ,用 "quilt pop " 退回上層…
如果要一次打完所有 patch 可以用 quilt push -a 一次打完…想退回 code base 時,就用 quilt pop -a 一路退到底。
可以用 quilt top 看你上一個打的 patch 是那個 patch ,用 quilt next 看下一個是那個 patch
如果發現 patch 有些地方需要修改,可以用quilt edit <檔案> 做修改…修改好了之後,可以用 quilt refresh 把修改寫入 "上一個打的 patch" ,也就是 quilt top 看得到的那個。
如果要寫新的 patch 可以用 quilt new
一般來說,如果你要手動修改你的 series 檔。可先 quilt pop -a 退回 code base 再做修改…如手動 mark 掉一些patch 或加上註解,註解是由 '#' 做為開頭。
如果code base 改變了…可 quilt pop -a 退回開頭,再 svn update (cvs ),再把一些已被 commit 的 patch remove 掉(這個要檢查一下,一般來說有 commit 都會說明 commit 了那些 patch ),再一個一個 push 回來
而如果你想 commit code 時,也可一面 push 一面 commit 。等 commit 完了,再把 series 裏已 push 且 commit 的 patch mark 掉,然後直接砍掉 /work/mypro/.pc 這個目錄…這是 quilt 管理 diff 的目錄…如此就可以直接可 upstream 同步。 (如果你是 maintainer )
當你要 release patch 到 mail list 前,可以把你的 code base 的版號(最好是 HEAD),和你之前相依的 patch (如果有的話),一起 release 出來。如果 release 的 patch 多於兩個。最好也把 series release 出來。
--
Reference:
How To Survive With Many Patches or Introduction to Quilt
沒有留言:
張貼留言