分布式版本控制系统入门
簡介
在過去幾年,對于分布式版本控制可以給開發過程提供的益處有許多爭論。最近,分布式工具已經很成熟了。盡管分布式工具的一些優點最初可能不明顯,但是從長期來看,它們提供的靈活性是非常有意義的。閱讀完本文之后,您應該能夠開始使用分布式版本控制系統,基本了解分布式模型能夠提供的優點。
圍繞分布式版本控制的爭論主要集中在不再需要的中心服務器。這是一個非常獨特的特性,對于一些開發人員組很重要,但是它的真正價值在于,它允許開發人員組實現他們選擇的幾乎任何工作流。它能夠完成很多事情,比如傳統的集中式模型,或兩個開發人員在咖啡館通過無線連接協同工作,等等。
允許開發人員以各種新的方式工作,這是分布式版本控制真正令人興奮的特點。實際上,在本文末尾會介紹如何實現這樣的“咖啡館”工作流。這對于作家、學校教師和 Linux? 內核開發人員都有益處。
什么是分布式版本控制?
分布式版本控制 (DVCS) 是一種不需要中心服務器的管理文件版本的方法,但是它也可以使用中心服務器。更改可以被合并到 DVCS 的任何其他用戶的系統中,因此可以實現非常靈活的工作流。
DVCS 的兩個主要優點是:它比集中的版本控制更靈活,因為它除了支持傳統的(集中式)工作流,還支持其他各種工作流;它比集中式服務器快得多,因為大多數操作在客戶機本地進行,而不需要網絡操作。
什么是鉤子?
鉤子是在版本控制操作的生命周期中通過程序執行操作的方法。例如,通過使用鉤子,可以在代碼簽入(check in)存儲庫時自動發送電子郵件。另外,還可以在簽入代碼之前,檢查用戶是否滿足一組條件,比如包含一個測試文件。另一種擴展版本控制系統功能的方法是編寫插件。如果打算編寫自己的插件,在?參考資料?中可以找到描述 Bazaar、Git 和 Mercurial 的插件系統的文章鏈接。
DVCS 和集中式版本控制系統的主要差異
在 DVCS 和集中式版本控制系統之間有三個關鍵差異。第一個差異是,DVCS 通過本地提交支持離線工作,這是由 DVCS 的操作方式決定的。這與集中式版本控制完全不同,集中式版本控制要求通過到中心服務器的連接執行所有操作。這種靈活性讓開發人員在飛機上也能夠像在辦公室中一樣輕松地工作,可以一次又一次地進行提交。
第二個差異是 DVCS 比集中式系統更靈活,因為 DVCS 支持許多不同類型的工作流,從傳統的集中式工作流到純粹的特殊工作流,再到特殊工作流和集中式工作流的組合。這種靈活性允許通過電子郵件、對等網絡和開發團隊喜歡的任何方式進行開發。
第三個差異是 DVCS 比集中式版本控制系統快得多,因為大多數操作在客戶機上進行,速度非常快。另外,在需要進行推(push )操作(與另一個節點通信)時,速度也更快,因為兩個客戶機機器上都有完整的元數據。速度差異相當顯著,根據使用本地存儲庫還是網絡存儲庫,DVCS 比 Subversion 快大約 3-10 倍。
回頁首
分布式版本控制工作流
因為 DVCS 非常靈活,可以實現各種各樣的工作流,但是由于篇幅有限,本文只討論兩種工作流。首先討論最常用的工作流之一 Partner 工作流。按照 Partner 工作流,一個開發人員啟動一個項目,然后進行分支。然后,在不同開發人員工作的分支之間來回合并更改。
第二種常用的工作流是通過本地提交使用集中式服務器。在這種工作流中,開發人員的工作方式與使用集中式 subversion 存儲庫時非常相似,但是他們進行本地提交,然后把最終更改推到集中式服務器。這種工作流有許多變體,包括與 Partner 工作流結合使用。重要的是,可以采用許多種工作方式,通過使用 DVCS,可以靈活地選擇最適合自己的工作方式。
回頁首
快速入門指南
了解一種新技術的最好方法之一是實際使用它。在本節中,簡要介紹 Mercurial、Bazaar 和 Git 中的常用操作,您可以試試這些操作:
- Mercurial
- 安裝:sudo easy_install-2.5 mercurial
- 建立項目目錄:mkdir hgrepo; cd hgrepo
- 初始化項目:hg init
- 添加文件:touch foo.txt; hg add foo.txt
- 提交:hg commit -m "added foo.txt" commit
- 抓取共享的存儲庫:hg clone ssh://example.com//projects/hgrepo
- 本地提交更改:hg -ci -m "adding a change"
- 把更改推到服務器:hg push
- 以補丁形式查看未處理的更新:hg incoming -p
- 從服務器下載更新:hg pull
- 應用更改:hg update
- 合并沖突:hg merge
- 合并兩個不相關的遠程存儲庫:hg pull -f ssh://example2.com//projects/hgrepo
- Bazaar
- 安裝:sudo easy_install-2.5 bzr
- 建立項目目錄:mkdir bzrrepo; cd bzrrepo
- 初始化項目:bzr init
- 添加文件:touch foo.txt; bzr add foo.txt
- 提交:bzr commit -m "added foo.txt" commit
- 抓取共享的存儲庫:bzr branch bzr+ssh://example.com/projects/gitrepo
- 本地提交更改:bzr -ci -m "adding a change"
- 把更改推到服務器:bzr push
- 從服務器下載更新:bzr pull
- 應用更改:bzr update
- 合并沖突:bzr merge
- Git
- 安裝:下載最新的 tar 文件?http://kernel.org/pub/software/scm/
- 建立項目目錄:mkdir gitrepo; cd gitrepo
- 初始化項目:git init
- 添加文件:touch foo.txt; git add foo.txt
- 提交:git commit -m "added foo.txt" commit
- 抓取共享的存儲庫:git clone ssh://example.com/projects/bzrrepo
- 本地提交更改:bzr -ci -m "adding a change" commit
- 把更改推到服務器:bzr push
- 從服務器下載更新:bzr pull
- 應用更改:bzr update
- 合并沖突:bzr merge
回頁首
轉換工具和與 subversion 的集成
這三種 DVCS 都能夠把現有的 subversion 存儲庫輕松地轉換為各自的格式,甚至可以在不同的 DVCS 之間進行轉換。這使開發人員能夠方便地試用 DVCS 或從一種 DVCS 轉移到另一種 DVCS。
例如,對于 Mercurial,可以使用工具 hgimportsvn 和 hgpullsvn 與現有的 subversion 存儲庫通信,創建新的 hg 存儲庫和歷史。tailor 工具是一種通用的存儲庫轉換工具。
另一種有意思的試用方法是集成 DVCS 與現有的 subversion 存儲庫。對這種方法的詳細討論超出了本文的范圍,但是?參考資料?給出了一些工具的鏈接,這些工具可以在 subversion 分支與 Git、Bazaar 和 Mercurial 之間進行雙向操作。
回頁首
第三方托管選項
如果開放源碼或商業開發人員不希望或不需要管理自己的集中式 “集線器”,那么可以選用流行的托管站點托管自己的 Git、Bazaar 或 Mercurial 項目。對于 Mercurial,流行的免費和付費托管站點是 Bitbucket。對于 Git,可以使用 Github;對于 Bazaar,可以使用由 Canonical 發起的 Launchpad。
回頁首
提示:“咖啡館” Mercurial 工作流
圖 1. 咖啡館工作流
如果希望實現安全的特殊版本控制工作流,讓兩個開發人員可以在咖啡館中通過無線網絡一起工作,那么可以試試下面的方法。
第一個用戶使用 Mercurial 創建一個存儲庫:
| mkdir /tmp/myhgrepo cd /tmp/myhgrepo hg init |
然后,通過 Web 作為只讀共享共享它:
| hg serve |
第二個用戶使用以下命令克隆這個存儲庫:
| hg clone http://example.com:8000 |
注意:這是另一臺機器的 IP 地址或本地主機名。在 OS X 上,可以通過對?your-machine-name.local?使用 Bonjour 獲得這一信息。
第二個用戶進行他需要的更改,然后作為只讀的 HTTP 共享提供他的存儲庫:
| http://example.com:8000 |
第一個用戶對第二個用戶的存儲庫拷貝執行 hg 拖操作:
| hg clone http://example2.com:8000 |
每個開發人員都是安全的,因為他們只在需要更新自己的本地文件系統時才對對方的存儲庫進行拖操作。
回頁首
結束語
本文討論了分布式版本控制能夠提供的價值,比較了三種主流工具 Git、Mercurial 和 Bazaar 之間的差異。如果您不太熟悉版本控制,那么應該繼續學習版本控制、鉤子和插件以及它們能夠提供的功能。
如果您是老手,那么應該試試這些工具,尋找最適合自己的工具。請通過?參考資料?中的鏈接詳細了解各種分布式版本控制系統以及別人的使用經驗。
轉載于:https://www.cnblogs.com/ryanlaw/archive/2011/10/11/2207967.html
總結
以上是生活随笔為你收集整理的分布式版本控制系统入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vant.dialog.alert什么方
- 下一篇: stm32l0的停止模式怎么唤醒_最强家