热门问题
时间线
聊天
视角
版本控制軟件比較
維基媒體列表條目 来自维基百科,自由的百科全书
Remove ads
以下是版本控制軟件比較。下表包括知名的版本控制和軟件組態管理(SCM)軟件的一般資訊和技術資訊。對不適用原始碼的SCM軟件,見開源組態管理軟件比較。
一般資訊
表格說明
- 庫模式表示原始碼庫各個副本之間的關係。在一個主從式架構中,用戶通過客戶端訪問總庫;一般而言,他們本地機器只儲存專案樹的一個工作副本。工作副本的變化必須提交到總庫之後才能反映給其他用戶。而在分散式架構中,庫之間是平等的,用戶一般除了他們的工作副本之外,還有本地庫來存放版本歷史。
- 併發模式表示如何管理工作副本的變化,以防止同時編輯造成庫中的數據混亂。在鎖定模式下,只有用戶從總庫請求並得到了一個檔案的排他鎖,才允許改變檔案。在合併模式下,用戶可以自由編輯檔案,但當他們提交變化到總庫時會被告知可能存在衝突,隨後版本控制系統可能會對雙方合併這些變化,或者當發生衝突時讓用戶來決定。注意,分散式版本控制幾乎都是合併的併發模式。
Remove ads
技術資訊
表格說明
- 軟件:應用的名稱。
- 程式語言:程式語言中的應用正在發展
- 儲存方法:表示檔案在庫中儲存的形式。快照表示提交的檔案被整個儲存——通常是壓縮的。變化集表示提交的檔案只儲存它與前後版本的區別。
- 變化範圍:表示記錄的變化是針對單獨的檔案,還是整個目錄樹。
- 版本ID:用來在庫中標識檔案的特定版本。系統可以使用偽隨機識別碼、版本的內容雜湊值或帶有版本序列號(命名空間)的檔名。而Integrated Difference的版本號則基於變化集自身,它可以表示多個檔案的變化。
- 網絡協定:同步變化時所使用的協定列表。
- 原始碼規模:原始碼的大小以兆(megabyte)為單位。
Remove ads
功能
表格說明
- 軟件:應用的名稱。
- 原子提交:保證所有的改變都提交成功或者都不成功。
- 檔案重新命名:表示系統是否允許檔案在改名後仍然保留他們的版本歷史。
- 合併檔案重新命名:表示系統是否能夠將一個分支上的檔案變化合併到另一個分支上已重新命名的同一個檔案上(或者相反)。 如果同一個檔案在兩個分支上都已經重新命名,則產生重新命名衝突,必須由用戶來解決。
- 符號連結:表示一個系統是否允許象普通檔案一樣對符號連結進行版本控制。 對符號連結的版本控制,某些人認為是一項功能,而另一些人則認為存在安全隱患(例如,一個到/etc/passwd的符號連結)。符號連結只支援特定的平台,這取決於軟件的實現。
- 前/後事件觸發:表示有能力在一個動作之前或之後觸發命令,例如發生一個提交的動作。
- 簽章版本:指整合了版本的數碼簽章,例如以OpenPGP的格式。
- 合併跟蹤:表示一個系統是否記得在哪些版本之間合併了哪些變化,並且只合併那些從一個分支合併到另一個分支時遺失的變化。
- 換行轉換:表示一個系統是否能適配文字檔案的換行符,從而匹配當前使用的作業系統的換行方式。控制變化的粒度,例如 Subversion,可以進行組態,依據檔案類型來處理換行符的不同,而Perforce根據一個單一、每個客戶端的組態轉換所有的文字檔案。
- 標籤:表示是否可以給一個特定版本賦予一個帶有含意的名字,無論這些名字被叫做標記還是標籤。
- 國際化支援:表示該軟件是否支援多語言環境和多作業系統。
- Unicode檔名支援:表示該軟件是否支援使用不同[[字符编码]]的檔案系統之間的互操作。
- 大庫支援:系統能高效處理十億位元組左右或更大的庫嗎?
Remove ads
進階功能
表格說明
- 關鍵詞擴充:支援關鍵詞自動擴充,例如檔案版本號。
- 互動式提交:互動式提交允許用戶對變化精挑細選,並決定哪些變化可以提交(未被選擇的變化只被保留為工作副本的變化),而不是只到檔案級別的粒度。
- 外部參照:在原始碼樹中嵌入外部庫。
- 部分檢出/複製:從庫中只檢出或複製特定子目錄的能力。
- 權限位:在版本歷史中跟蹤檔案權限位。
- 保留時間戳:對於檔案系統屬性中的最後修改時間,以提交時間覆蓋檢出時間。
- 用戶自動合併工具:自動合併可以嘗試通過用戶選擇的任何工具來進行(希望能以每個檔案為基礎來組態)。
- 支援的格式:支援讀/寫,或者唯讀(轉換,有可能再重複)。
- 共用所得目標的構建快取:通過這一能力,如果其他協同運作用戶恰好共用了同樣的依賴,可以引入其他用戶構建的所得目標,而無需在本地重建它們。
Remove ads
基本命令
表格說明
- 綠格中不在[方括號]里的命令使用了互動式的命令列提示符。[方括號]中的文字用來解釋哪裏能找到等價功能。
- 庫初始化:建立一個新的空庫(比如,版本控制資料庫)。
- 克隆:建立一個完全相同的庫實例(在一個安全事務中)。
- 拉:將版本從遠端庫下載到本地庫。
- 推:將版本從本地庫上載到遠端庫。
- 本地分支:建立一個不存在於原始遠端庫中的本地分支。
- 檢出:從(遠端)庫建立一個本地工作副本。
- 更新:用庫中的最新版本更新工作副本中的檔案。
- 鎖定:鎖定庫中的檔案,以免被其他用戶更改。
- 添加:標記指定的檔案,以便在下一次提交時添加到庫中。
- 移除:標記指定的檔案,以便在下一次提交時移除(註:儲存在移除時及之前的相關版本歷史)。
- 移動:標記指定的檔案,以便在下一次提交時移動到新的位置。
- 拷貝:標記指定的檔案,以便在下一次提交時拷貝。
- 合併:融合同一個工作副本路徑的兩個來源之間的差別。
- 提交:將變化記錄到庫中。
- 恢復:從庫中恢復工作副本檔案。
- 生成打包檔案:建立一個包含壓縮的對給定庫的變化集的檔案。
- 重定位:將本地提交重定位到已更新的上游地址。
Remove ads
進階命令
表格說明
- 綠格中不在[方括號]里的命令使用了互動式的命令列提示符。[方括號]中的文字用來解釋哪裏能找到等價功能。
- 命令別名:為指定的命令或組合建立客製化的別名
- 鎖定/解鎖:排他性地鎖定一個檔案,以防被其他人編輯。
- 擱置/取消擱置:在工作目錄中暫時擱置部分或全部的變化。
- 轉返:從歷史中移除一個版本。
- 挑選:只把某些修訂從一個分支移動到另一個分支(而不是合併分支)。
- 二分檢索:在原始碼歷史中,使用二分檢索來尋找一個變化的引入或修復。
- 出入:查詢本地庫和遠端庫之間的差別(該差別可能會以推/拉的方式傳送/取回)。
- 過濾:在庫中搜尋,以找到那些匹配一個模式的行。
- 記錄:在一次提交中只包含一個檔案的某些變化,而不包含其它的變化。
Remove ads
用戶介面
表格說明
- 軟件:應用的名稱。
- 網頁版介面:表示應用軟件是否包含一個網頁版介面。網頁版介面可以允許軟件傳送診斷數據到一個網站,甚至能允許對應用軟件進行遠端控制。
- 圖形介面:GUI,圖形化使用者介面。 如果一個軟件產品提供了GUI,它的功能可以通過應用程式窗口來訪問,而不是只能通過象DOS介面一樣在命令提示符後面敲入命令來訪問。
- 外掛程式:功能通過整合式開發環境來實現。 最低的功能應該是,列出檔案的版本狀態,及檢入/檢出檔案。
Remove ads
歷史及用戶
表格說明
- 軟件:應用的名稱。
- 歷史:簡短地講述軟件的起源好發展。
- 知名用戶:使用該軟件作為主要版本控制系統的知名工程列表,不包括該軟件自己。如果它有一個完整的列表,後邊會列出該列表的連結。
Remove ads
參見
- 版本控制軟件列表
- 自由軟件寄存服務比較
註釋
- 在ClearCase中,可以設置觸發器來打開鎖定模式,這已經在很多地方使用。然而,ClearCase開發通常出現在個人分支,在這種情況下每個開發者擁有他們自己的分支,因此鎖定還是合併的併發模式關係不大。一旦開發者準備好將他們的代碼交付到專案中,代碼就被合併到主分支。
- RTC不是分散式版本控制系統;但擁有某些分散式特徵可以組態
- 原始的Unix原始碼存在各種變體,但只有一個在持續維護
- 當多個用戶同時編輯一個檔案的同一個版本時,只有其中一個可以將變化寫回去。
- SCCS的某些變體是免費軟件,而其它的則作為商業Unix分發的一部分保持封閉。
- 在Subversion中,一個檔案屬性允許鎖定模式基於每個檔案。
- Bazaar的critical模組是用Pyrex寫的。
- Bazaar bundle是一個簡要的差異,有足夠的額外資訊來保留歷史。
- 二進制檔案採用快照
- sqlite3.c的為4 MB
- Mercurial版本號是本地的;它們可以與庫中的不同,這取決於按什麼順序執行合併。
- Monotone的版本代表變化集,它的清單代表快照,每個版本都連結到一些清單。但清單屬於遺留結構,他們不再被儲存到資料庫中,也不能在需要時重建。現在真正的工作發生在rosters中,它是混合的快照/變化集結構。
- Veracity版本號是本地的;它們可以與庫中的不同,這取決於按什麼順序執行合併。
- 邪惡分身是常事。邪惡分身在SCM,而不是荷里活 互聯網檔案館的存檔,存檔日期2013-10-16.(英文)
- 原子提交可以實現於個別檢入ClearCase 7.1.1釋出說明(英文)。
- darcs的每個修補程式具有一個唯一識別碼,不可能兩次將同一個修補程式合併到庫中(除非使用「不安全」命令破壞性地修改歷史)。
- 使用單項版本屬性(「單項工作」演示,覆蓋用戶定義屬性 (頁面存檔備份,存於互聯網檔案館)(英文))。
- 它的訊息和圖形介面只有英語本地化,儘管軟件被驗證可以很好地執行在不同語言的作業系統上。
- Git不明確地跟蹤重新命名,因為從設計上它不跟蹤個別檔案。重新命名和拆分原始檔時,如果檔案內容不發生顯著變化,則會被檢測到。
- 從git-1.7.9以後(見release notes Archive.today的存檔,存檔日期2013-04-15(英文))。更老的版本不對提交簽章,僅標籤(見git標籤(1)手冊頁 (頁面存檔備份,存於互聯網檔案館)(英文)中的-s選項)
- 自1.7.10版本起支援UTF-8檔名(MSysGit釋出說明(英文))。
- 對於非常大的庫,Git存在一些問題。見SoC 2012 Ideas (頁面存檔備份,存於互聯網檔案館)(英文)中「更好的大檔案支援」一節和「設計一個更快的索引格式」一節。
- 完全允許變化包提供全部工作流,21 CFR Part 11服從基於單項控制變化包的數碼簽章。
- 2009 SP5加入了一項功能來合併子開發路徑。
- Mercurial正在進行翻譯,目標語言至少包括荷蘭語和漢語
- 可以通過用戶級勾點實現
- Perforce將對符號連結本身進行版本控制,但如果您通過符號連結訪問它們,並不會辨識出它自己的被版本控制的視圖(本地檔案樹)。
- 貫穿過程行為組件:操作顧問好操作參與者。http://jazz.net/library/article/292(英文) (頁面存檔備份,存於互聯網檔案館)
- 雖然SCCS的原始碼是按支援國際化寫的,但實際上只有英語的訊息。
- 從2006版之後支援
- 若且唯若移動的目標文件與原始檔在同一個Subversion庫中,Subversion可以移動一個檔案並儲存它的歷史。跨庫的移動需要用第三方工具,比如svk。
- 從SVN 1.8開始,subversion在客戶端支援改進的移動跟蹤。在伺服器端仍然不支援。
- 使用subversion伺服器
- v6.6a到v7.1a在亞洲版,從v7.2開始在通用版
- 重新命名時移除版本改變歷史;舊名字不再被參照。
- 不能在動態視圖中禁用。
- 使用CVSROOT/modules檔案的別名。
- 當加入一個檔案時,CVS會記錄它的執行位,但並被允許在之後改變它。
- 這是一個GUI功能,它是通過TortoiseCVS和WinCVS來支援的,它們都包含/使用CVSNT。
- 和CVS一樣,並增加了複製庫(包括「影子」庫)的能力。
- 使用模組/目錄名或別名來建立,使用CVSROOT/modules或CVSROOT/modules2管理檔案。
- 要求所使用的構建工具也支援。
- Darcs可以自動檢測#!指令碼,並在檢出時使它們可執行。
- 使用子專案功能(文件包 | 用戶指南 | 將一個專案或流關聯到其它對象 (頁面存檔備份,存於互聯網檔案館)(英文))。
- 可以巢狀檢出,命令為「fossil open --nested」
- add -i和add -p,參見git-add(1)指南頁面 (頁面存檔備份,存於互聯網檔案館)(英文)
- 在伺服器端可以作為專案選項組態,在客戶端可以作為用戶選項組態。
- commit --interactive,參見SVK::命令::提交 (頁面存檔備份,存於互聯網檔案館)(英文)
- 通過第三方工具,如Tortoise SVN。
- SVN不能保留檔案修改時間。如果客戶端要求,它可以恢復檢入時間作為最後修改時間。預設不支援。
- 檔案的MIME類型必須被檢測為一個「人類可讀」的MIME類型,即使合併工具可以與非人類可讀的檔案一起工作。
- 重量级检出和轻量级检出, [2016-06-17], (原始內容存檔於2016-06-30)
- 重定位外掛程式
- darcs沒有命名的分支,不管是否在本地,分支都是通過克隆庫來單獨處理的
- darcs send準備一組修補程式,預設通過郵件傳送,但也可以傳送到一個檔案
- pull是fetch加merge
- 拷貝在這之後被檢測到,很象重新命名
- Mercurial書籤 (頁面存檔備份,存於互聯網檔案館)(英文)類似於本地分支
- 通過任何方法,先把要設為不可變的檔案放在一個不可變目錄里,再vcheckin。
- 先把不可變檔案從它的原始目錄mv或link到它的目的不可變目錄,再vcheckin。
- 通過任何方法,先把不可變檔案從它的原始目錄拷貝到它的目的不可變目錄,再vcheckin。
- 您也可以啟用它,在庫伺服器控制面板或設定檔中,作為一個主要的偏好
- 要求管理員權限。您可以使用「cvs update –e –j @commitid –j "@<commitid"」將一個變化「轉返」,但該變化和轉返會在歷史中留下痕跡
- 使用TortoiseCVS或WinCVS來提交變化到目標伺服器並選擇保留哪個檔案
- 二分檢索可用於cvs,因此也可用於CVSNT
- darcs對修補程式操作,而不是對修訂,在把一個給定的修補程式從一個庫拉到另一個時,挑選組成部分比較簡單,只要依賴被滿足
- fossil stash支援藉助註釋來進行多個擱置
- git stash是一個多級擱置,它可以同時擱置多個變化集
- 僅當工作在本地庫且沒有子版本時。disapprove命令也特許以替代。
- svk狀態列表用於在工作副本和庫之間比較,而不是在兩個庫之間比較
- SVN二分檢索工具svn-bisect. [2016-06-27]. (原始內容存檔於2016-08-16) (英語).
- svn狀態列表用於在工作副本和庫之間比較,而不是在兩個庫之間比較
- 鎖是報告形式的,在非連接狀態下,不能強制執行
- 單庫訪問用hgweb,多庫從一個HTTP地址訪問用hgwebdir
Remove ads
參考文獻
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads