說到版本控制工具,很多人可能都會馬上想到cvs和subversion,但自從開始使用git以後,我在自己的開發過程中都會優先選擇git而非前者。
最早從今年初就已經開始用git。剛開始的時候的確會感到git比較複雜。乙個原因是它不同於subversion這樣的集中式版本控制系統,在 subversion中只有乙個倉庫(repository),許多個工作目錄(working copy),而像git這樣的分布式版本控制系統中,每乙個工作目錄都包含乙個完整倉庫,倉庫之間內容可能不相同,可以進行倉庫之間的同步。另乙個原因是 git的命令非常之多,而它本身的概念也比較複雜(雖然 linus說git是「stupid contenc tracker」,但其實這個東西不適合傻瓜使用),還分repository、index、working tree等,直接使用也會比較麻煩,所以實際上我一直都是使用cogito,只有必要時才直接使用git。
為什麼要使用分布式的版本控制系統?subversion有什麼不好?
我最開始使用subversion時一直覺得有一點很不爽,如果我想把某個已有的專案使用subversion來進行管理,首先要建立乙個倉庫,然後把文 件import到倉庫,最後再check out,然後在check out的工作目錄中進行修改。為什麼要那麼麻煩?我只是自己乙個人進行開發而已,為什麼非要有乙個倉庫?此其一,只是不爽而已。
第二點使我沒有辦法使用subversion、不得不尋找其他的工具的原因是,我需要在幾台電腦上同時進行開發,我希望在每一台電腦上都能使用版本控制工 具。所以,我需要有乙個放在優盤上的倉庫,這個時候使用subversion就有問題了。一來當你提交時你必須得把優盤插上電腦,每次提交都得插上;二來 倉庫在優盤上的位置不能改變,否則路徑改變的話使用file協議拷貝出來的工作目錄就廢了。我查過svn propset的幫助,似乎可以改變倉庫位址,但我不會,網上也沒有搜到。
這兩個問題git都可以很好的解決(嚴格來說我使用的是cogito)。要把已有的檔案加入版本控制的話使用cg init一條命令即可。而分布式的版本控制系統解決第二個問題實在是再適合不過了。在優盤上建立乙個倉庫,不同機器上的倉庫在開發時就儘管commit到 本地的倉庫好了,在要換機器之前先把修改push到優盤上的倉庫,到其他機器上時pull出來,然後merge一下就好了。cogito可以直接使用 update完成這兩步操作。而優盤上倉庫路徑如果有改變的話可以使用cg-branch-chg很方便地修改遠端倉庫的位址。實際上可以認為優盤上的倉 庫就是乙個**倉庫,所以有許多個倉庫其實並不是一件可怕的事情,完全可以像使用集中式的版本控制系統那樣自定乙個為**倉庫即可。但分布式的版本控制系 統不強制你這麼做,給你更多的靈活性。
此外,git對磁碟空間的利用也更高效(不過需要定期對倉庫使用git repack -d命令),其他方面效能也都很出色。想想它要管理linux核心那麼大的專案就可以知道了。
linus在google tech talk上做過git的介紹,以及他是如何使用git來管理核心開發的。他的演講裡面對分布式版本控制系統的好處有更好的說明。不過linus自己也承認 自己是個「strong opinion person」,他在演講的時候多次說集中式的版本控制系統沒有前途,因此,subversion的開發者想要開發乙個更好的cvs其實是腦子出了毛病, 實在是太「offensive」了。好在他是linus,大家都知道他的個性。
但是,但是……git很好,可它不跨平台,至少在非linux平台上執行得沒有那麼好,在非linux檔案系統上會有麻煩。雖然我不在windows上做 開發,但是最近要在solaris上做開發,我不想花時間在solaris上把git裝起來,而且如果以後要和其他使用windows的人合作,我可不想 再使用subversion。所以,我需要乙個替代git的工具。
這篇文章介紹了mozilla「移向」新版本控制工具時是如何做出選擇。(原**調是「move」而不是「pick」,因為最後的候選者都很好。)首先肯 定要用分布式的,然後在4個分布式的版本控制工具中篩選,git和monotone因為支援平台問題而被排除,剩下bazaar和mercurial。前 者有 canonicol在支援。而後者已經是opensolaris等著名專案的版本控制工具,而且有著非常完善的文件,可以很方便地使用python的 web server發布專案。在mozilla的版本控制工具選擇中,mercurial最終因為效能而勝出。所以,我也決定轉到mercurial,看了看文 檔,感覺和cogito很像,比git更簡單,遷移過程應該會比較順利。
另外提一下,分布式的版本控制工具還有darcs,arch。前者是用haskell編寫,後者據說很複雜。
GIT分布式版本控制
git config global user.name your name git config global user.email email example.com git init初始化建立版本庫 git clone url從網路上轉殖repository,注意clone是複製了history...
Git(分布式版本控制)
git 分布式版本控制 git伺服器端 root web1 yum install y git 安裝git root web1 mkdir var git root web1 git init var git project bare 建立乙個空的git倉庫 初始化空的 git 版本庫於 var g...
版本控制工具 git與svn 分布式vs集中式
版本控制 即記錄乙個或若干檔案內容變化,以便將來查閱特定版本修訂情況以及回溯的系統。subversion的特點 1.每個版本庫有唯一的url 官方位址 每個使用者都從這個位址獲取 和資料 2.獲取 的更新,也只能連線到這個唯一的版本庫,同步以取得最新資料 3.提交必須有網路連線 非本地版本庫 4.提...