距離第一次使用HG已經(jīng)由2,3年了。 從第一次將HG用于自己的項目, 用U盤同步代碼. 到現(xiàn)在將HG應(yīng)用于linux, 版本差異發(fā)布, 項目內(nèi)部多人的分布式開發(fā),已經(jīng)感覺非常熟練。
我們的項目的客戶端和服務(wù)器均由C++開發(fā),由于HG設(shè)計的理念是1個工程對應(yīng)1個庫, 因此我們的客戶端和服務(wù)器是分開的兩個HG代碼庫。這種思想和SVN管理的代碼有很大不同。SVN時代的游戲工程大多是這樣安排目錄的:
common <-客戶端和服務(wù)器共享的庫
client<-客戶端的代碼
server<-服務(wù)器的代碼
通過SVN強大的權(quán)限控制給不同的前后端賦予權(quán)限,前后端程序?qū)@得不同的目錄組合。SVN下的這種工程組織方法能很好的解決單一語言跨工程的代碼,協(xié)議共享問題。雖然現(xiàn)在各種Erlang,Java的服務(wù)器語言與as3,lua的不同客戶端腳本語言混雜的時代已經(jīng)無所謂這種老式設(shè)計思想。但是對于我們純C++的手游來說,還是必須面對分布式代碼管理工具下的代碼跨庫共享問題。
我就這個問題與多年前被我推薦過HG的朋友討論起來,他們也存在我們這個問題,但是他們的解決方法就是每個工程一個庫。然后被我問到:“同步一次代碼,一次次的打開不同的庫(他們客戶端+服務(wù)器一共6到7個HG代碼庫),進行同步, 完成后, 還要反向pull,不累啊?”, 朋友回答:“習(xí)慣就好”
隨后,我也翻查了git對多項目的支持。得到的答案也是跟HG一樣的, 這類分布式代碼管理工具本身的設(shè)計理念只有賬號,而無權(quán)限, 本身就是基于開源代碼精神設(shè)計的工具, 如果分了權(quán)限,豈不是違背開源精神(這是我想的
)。因此如果想管理多個項目代碼, 要么多庫,要么合庫。