4個著名VCS的比較

特徵 CVS Git Mercurial Subversion
是否原子提交 CVS: 沒有. CVS提交不是原子的 Git: 是的. 提交都是原子的 Mercurial: 是的 Subversion: 提交都是原子的
文件和目錄是否能夠移動或重命名 CVS: 不是. 重命名不支持. 若是手動進行, 可能會損壞歷史記錄 Git: 支持重命名, 這是很實用的目的. git甚至能檢測到重命名以後文件的改變. 儘管如此, 基於特殊的存儲結構, 重命名不會被顯示的記錄, git可以推導出來(在實際使用中很容易作到) Mercurial: 是的, 重命名是支持的 Subversion: 是的. 支持重命名
在移動或重命名以後智能合併 CVS: 不能. 重命名都不支持, 就沒必要說智能了 Git: 不支持. 細節在Git FAQ裏: 「Git有一個重命名的命令git mv, 可是這僅僅是爲了便利. 效果和移掉某個文件, 增長另一個文件沒有任何區別」 Mercurial: 是的. 重命名以後智能合併是支持的. Mercurtial文檔說:「若是我修改一個文件,而你從新命名了這個文件, 而後咱們合併咱們的變動, 那麼我所作的修改就會被更新到根據舊文件名字而產生的新文件裏(這可能就是你所指望的‘最簡單的動做’, 可是不是全部版本控制系統都支持) Subversion: 不支持. 「svn help me「中提到「注意: 這個子命令至關於拷貝和刪除.「而且可能有個bug
文件和目錄拷貝 CVS: 不能. 拷貝不支持 Git: 不能. 拷貝不支持 Mercurtial: 是的. 支持拷貝 Subversion: 是的. 而且拷貝很是容易(O(1)). 包括產生分支
遠程存儲倉庫的備份 CVS: 間接的. 可使用John Polstra寫的CVSup Git: 是的. 是git的內部特徵 Mercurial: 是的 Subversion: 間接的. 可使用Chia-liang Kao的SVN::Mirror插件(好像是臺灣人)或Shlomi Fish的SVN-Pusher工具
是否傳遞變動到父倉庫 CVS: 不會 Git: 是的(Linux內核開發過程常用這個特徵) Mercurtial: 是的 Subversion: 是的, 使用要麼是Chia-Ling Kao的SVN::Mirror腳本或者Shlomi Fish的svn-push工具
倉庫權限 CVS: 頗有限. 「pre-commit hook scripts「可以被用來實現各類權限控制系統 Git: 請看和Git一塊兒附帶的contrib/hooks/update-paranoid. 看和svnperms相似的path_rules的代碼 Mercutial: 是的. 它可以鎖住倉庫, 子目錄或者使用hooks後的文件 Subversion: 是的. 基於HTTP權限的WebDAV-based模塊可以支持基於目錄級的倉庫
變動集 CVS: 不是. 變動是基於文件的 Git: 是的. 是支持的, 建立他們很容易 Mercurial: 是的. 變動集是支持的 Subversion: 部分支持. 對於一次提交會隱式建立一個變動集
跟蹤線性的文件歷史 CVS: 是的. cvs annotate Git: 是的.(git blame) Mercurial: 是的(hg annotate) Subversion: 是的(svn blame)
可以只在倉庫的單目錄下做用 CVS: 是的 Git: 不是. 儘管如此, 提交多少能被限制, 請看「Repository Permissions」 Mercurial: 可以基於某樹的某個子集進行提交. 也有局部檢出的能力 Subversion: 是的
跟蹤未提交的變化 CVS: 是的. 經過cvs diff Git: 是的. 另外, 分支在git裏很是智能, 在某些工做流裏可以被當成是另一個未提交代碼的存儲庫. 請看「git stash「命令 Mercurial: 是的. 使用hg diff Subversion: 是的. 使用svn diff
基於單個文件的提交信息 CVS: 不是. 提交信息是基於單次變化的 Git: 是的. 提交信息基於變動集 Mercurial: 不是 Subversion: 不是. 沒有這個特徵
文檔 CVS: 很是棒. 有不少在線的tutorials和資源, 在線的書籍. 命令行客戶端也支持一個在線的幫助系統 Git: 良好. 短的幫助比較簡潔難懂. man頁頗有份量, 但容易誤解. 有不少tutorial Mercurial: 很好. 有基於公司的書籍和wiki. 每一個命令都集成了幫助 Subversion: 很好. 有一些在線的書籍和一些在線的tutorials和資源. 而且書籍是以docbook/xml寫的因此很容易變換成其餘格式. 命令行一樣提供了在線的幫助系統
配置是否輕鬆 CVS: 好. 是個事實上的標準. 基於每一個系統都有而且很容易配置 Git: 好. 在現有平臺上二進制可用. 須要C編譯器和Perl. 在windows上須要cygwin. 並有一些Unix特徵 Mercurial: 很是好. 幾乎全部平臺都有二進制包. 從源碼編譯須要python2.3以上, 而且須要C編譯器 Subversion: Subversion服務器須要安裝在apache2模塊裏(若是有人但願HTTP做爲底層協議的話)或使用它自身的服務器. 客戶端須要Subversion特徵的邏輯還有WebDAV庫(針對HTTP). 安裝組件很直接, 可是須要一些額外的工做(假定subversion在某些平臺沒有二進制包可用)
命令集 CVS: 包含了3個常常用到的命令的簡單的命令集(cvs commit, cvs update和cvs checkout)和其它一些 Git: 命令集很豐富, 而且和CVS不兼容 Mercurial: 嘗試模仿CVS交互方式, 可是偏離了基於不一樣的設計的意圖 Subversion: 類CVS的命令集, 可以很容易被CVS用戶使用
網絡支持 CVS: 好. cvs在不一樣的場合使用不一樣的協議. 協議可以經過ssh連接的加密隧道進行 Git: 很是棒. 可以使用本地的git協議, 但也能在rsync, ssh, HTTP和HTTPS上使用 Mercurial: 很是棒. 使用HTTP或ssh. 遠程訪問會很是安全, 在只讀網絡裏不須要上鎖 Subversion: 很是好. Subversion服務器支持WebDAV+DeltaV(基於HTTP或HTTPS)做爲底層協議, 或者它自身的協議一樣能在ssh連接通道里使用.
可移植性 CVS: 好. 客戶端能在UNIX, Windows和Mac OS上使用. 服務器端能在UNIX, 附有UNIX模擬層的Windows上使用 Git: 客戶端運行在大多數的UNIX系統上, 但沒有MS-Windows本地程序. 基於cygwin的系統看起來也能使用 Mercurial: 很是棒. 運行在基於全部能運行python的平臺.倉庫是兼容性的基於CPU結構和字節序的 Subversion: 很是好. 客戶端和服務器端都能在UNIX, Windows和Mac OS X上運行
web接口 CVS: 是的. CVSweb, ViewVC, Chora和wwCVS Git: 是的. Gitweb包含在發佈包中 Mercurial: 是的. Web接口是內置組件 Subversion: 是的. ViewVC, SVN::Web, WebSVN, ViewSVN, mod_svn_view, Chora, Trac, SVN::RaWeb::Light, SVN Browser, Insurrection和perl_svn.另外, Subversion的apache服務也提供了一個基礎的web接口
圖形用戶界面 CVS: 很是好. 有不少圖形界面能夠用: WinCVS, Cervisia(對於KDE), TortoiseCVS(Windows瀏覽器插件) Git: Gitk包含在發行版中. Qqit和Git-gui工具也可以使用 Mercurial: 經過hgit擴展查看歷史; 檢入擴展(hgct)使得提交很容易. 一些第三方的IDEs和GUI工具(如eric3, meld)有一些集成的Mercurial支持 Subversion: 很是好. 有不少GUIs可用: RapidSVN(跨平臺), TortoiseSVN(Windows瀏覽器插件), Jsvn(java), 等. 大多數都還在開發中
相關文章
相關標籤/搜索