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