热门问题
时间线
聊天
视角
版本控制軟件比較
維基媒體列表條目 来自维基百科,自由的百科全书
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