回到首頁過去文章最新消息FAQ關於我們

使用遠端儲庫

之前提到,svk 用 SVN::Mirror 處理遠端儲庫存取。你得在使用前先映照(mirror)它們:

$ svk mirror //project/trunk https://svn.somewhere.org/repos/trunk $ svk sync //project/trunk

你需要設定 Subversion 伺服器(看是要用 Apache2 或 svnserve)。請參看其它文章或教學手冊。

然後建立本地分支,接著打包、買好機票去旅行吧:

$ svk cp -m 'create a local branch' //project/trunk //project/local

你應該可以調出 //project/local,並以上述模式操作。當然你還是可以用 cp //project/local //project/new-feature,建立自己的分支。

svk sync 會同步到最新的 trunk,當然你得連上網路。從 trunk 合併新的更動到你的本地分支,就像之前合併廠商分支的例子一樣。不過怎麼把本地的更動合併到遠端儲庫?

$ svk smerge //project/local //project/trunk

很直觀,不是嗎?

你應該先用 smerge -C 看看有沒有衝突。即使你的本地分支沒有合併最新的 trunk,假如沒有衝突,svk 還是會幫你合併更動,並且直接提交給遠端儲庫。但還是請先和最新的 trunk 做同步化。

事實上,如果你上線了,正想提交小範圍的更動,你可以省略“修改本地分支,然後合併回去”這個過程。直接:

$ svk switch //project/trunk $ svk commit

第一行意味著我們從本地分支跳到 trunk,這是個包含已映像檔案的路徑。switch 指令會保留你本地的更動,將其套用到 trunk 上,看起來就像更動發生在 trunk 的 checkout 上似的。已映像路徑上的 svk commit 接著把更動直接提交給遠端伺服器,然後替你做同步動作。如果伺服器暫時連不上,則 switch 回到本地,稍後再予以合併。

你也可合併個別更動。用 svk log 找出更動編號,然後:

$ svk cmerge -c 113,125-128,130 //project/trunk //project/stable

假設你正在奮戰的專案,你並沒有提交的權限,你可以先產生 diff,然後送給作者:

$ svk diff //project/trunk //project/local

多重儲庫

不少人同時跨足好幾個專案。只要你已經用 svk 把這些專案給映像下來,你可以跑 svk sync -a,一次同步所有專案。

假定另一位黑客用 svk 替專案加入新功能,也公佈了他的分支,你希望試試他寫的功能:

$ svk mirror //project/new-feature http://svn.somewhere.else/repos/trunk $ svk sync //project/new-feature

於是你便可從他那裡合併更動:

$ svk smerge //project/new-feature ~/work/project

或是你決定把他的分支直接合併到 trunk:

$ svk smerge //project/new-feature //project/trunk

你也可用之前提及的 cmerge 指令,從有新功能的分支中,要求僅合併特定的更動。

這是個最小的分散式開發模式。每個人都可以有自己私人的產品分支,也可以將其合併給維護人。也許有人對此有所非議,我不會在此詳談此問題。雖然工具多少會提出解決問題的特定模式,必要時我們可以修改模式,或乾脆換別的工具。

以下是未來規劃的功能:

更動簽章及驗證

用 gpg 簽署提交的修改檔案。其實這個已經完成了;只不過 SVN::Mirror 這邊還沒辦法傳送和驗證簽章。

VCP 整合

可以從其它版本控制系統,如 cvs 或 perforce,進行映像(以及分支)。好比說:

$ svk mirror //foo/fromcvs cvs://cvs.server/foo@trunk 這會省下我(還有其它人)投入使用其它版本控制系統的專案時,不少的麻煩,在不同專案間轉換時,也比較不容易被不同的指令集搞混。

Patch 管理器

無提交權的人可以像上述例子那樣輕鬆地產生 diff。同時這也有利於用 patch 管理器記錄合併歷程,大型專案需要合併許多開發者的 patch,這個功能相當便於建構出針對特定更動,加以審查、測試,然後再予以迅速套用(click-to-apply)的功能。

svk 的開發相當迅速,上述功能應該很快可以問世!

結語

svk 誕生 5 個月後,成了一套快速、全功能的分散式版本控制系統。這全賴於 Perl 的彈性和精神 ── 拿現有的積木拼出新玩意。此外,這些指令全是用來達成你的需求的!(the commands are designed to DWIM,譯注 1)!

假如你有興趣,可以下載它並如同其它 Perl 模組般加以安裝。希望不久我會收到你的抱怨,好用來改進 svk,也讓開放源碼國度更具生產力。

Perl.com Compilation Copyright c 1998-2004O'Reilly Media, Inc.

譯注 1:DWIM(Do What I Mean),原指 Perl 可理解程式設計者真實意圖,而非僅有程式碼解析能力。請參見 http://www.greglondon.com/iperl/html/iperl.html。


<<< Page 1 : <<    
第 2 頁