JeffHung.Blog

(My smile insists of having nose. :-)

SubStation - Split and synchronize subversion repositories (i)

Subversion (SVN) 是一個集中式的版本控制系統,因此,其中一個主要的限制便是,在使用的時候,必須要連上網路,以便與其 server 連結。儘管在架構設計上,SVN 已經盡可能的減少網路頻寬的使用,但在正常運作上,仍然是有許多操作,是必須連結到 server 上進行的。
然而,實際上,在開發的過程當中,並不是能夠無時無刻的連結在網路上。最近我們就遇到了這樣子的一個需求,因應業務需要,我們需要有一組人,南下到客戶的工廠 on site,當場在工廠內改程式。由於環境的因素,在該處無法連結到 Internet,因此也就不可能連回位於公司內的 SVN server。因為程式複雜度的關係,這支遠在南部的特遣隊,有可能需要北部辦公室的支援,方能解決一些程式的問題,因此我們需要一套機制,讓在南部的同事,能夠與台北辦公室,進行程式碼的同步。換言之,我們需要一套機制,能夠 offline 使用 SVN。
也正是為了 offline 開發的需求,clkao 開發了 SVK 這套建基於 SVN 的工具,使開發者可以將 SVN repository 映射 (mirror) 在自己的電腦裡,離線進行開發、commit,事後在得以 online 時,再與主 SVN repository 進行同步。SVK 是套很棒的工具,然而卻還是沒有辦法滿足我們的需求。最主要的問題在於,SVK 是設計給單人使用,而我們外派到南部的,是一整組人馬,且彼此之間,也有程式碼相互同步的需求。換句話說,實際上我們需要的,是要能夠複製一份 SVN repository,並能夠在特定的時候,與主 SVN repository 同步。這樣一來,複製出來的 SVN repository,就可以作為在南部的同事們之間,協同開發的基礎。
我們希望,透過這樣子的機制,能夠在南下前,將主 repository 予以 split 出一個複本,帶到南部去工作。白天時,南下的組員們,彼此之間就使用南部的 repository 同步工作。等到晚上回到宿舍,能夠上網時,再透過 SSH tunnel,將南部的 repository,與北部的主 repository,予以 synchronize:將北部新修改的程式,送進南部的 repository 裡;亦將南部新修改的程式,送進北部的 [...]