一 源碼管理工具
源碼管理(SCM/Source Code Management),也稱為版本控制系統(VCS/Version Control System)。
1)為什麼我們需要SCM/VCS
1. 備份和恢複:源碼是軟體公司的财富,備份和恢複用來防止意外的損失;
2. 同步:同一項目中多程式員間實作代碼的共享和同步;
3. 短期的撤銷:通常的如果某個開發人員的送出導緻了break,則可以撤銷導緻break的送出;
4. 長期的撤銷:如果某個BUG是很久以前的送出導緻,則可以撤銷到當時送出的版本來debug;
5. 跟蹤改變:每次改變的送出都有注釋,改變的曆史會被儲存,我們還可以看到送出的時間,作者等資訊;
6. 沙盒(sandbox):開發人員一般在送出前都要確定build通過和功能運作正常,本地工作副本相當于沙盒確定送出的源碼工作正常;
7. 分支和合并(branch and merge):在軟體的子產品開發中,分支用來實作子產品的獨立開發,在子產品開發完成後在合并到一起;
2)鎖類型或合并類型,Lock/Merge, 源碼管理工具,按照是否允許多人同時修改一個檔案,分為Merge和lock;lock類型,如果有一個開發人員checkout檔案,則其他的開發人員 不能checkout;Merge類型,允許多人同時checkout同一個檔案,然後在送出時Merge。由于Merge相比Lock更靈活更有助于多 個開發人員間的協作,是以現在基本上所有的源碼管理工具都是Merge類型,還有的同時支援Merge和Lock。
3)集中式和分布式,Server+Client(Centralized)/ Distributed(decentralized), 傳統的源碼管理都是集中式的,所有的開發人員本地隻有一個副本,必須送出到集中的同一個server repository後才能實作與其他的開發人員的共享;最近新興的分布式的源碼管理,開發人員在本地不僅有工作副本,還有自己的Repository, 每個開發人員本地的Repository都可以當做server,這樣可以通過開發人員本地的repository更好的實作在送出前開發人員間的共享。
4)基本概念
源碼倉庫(Repository )(repo) : 存儲檔案的資料庫;
伺服器(Server):存儲repo的計算機;
工作副本(Working Set/Working Copy):開發人員的本地副本,開發人員從伺服器的代碼倉庫(Server Repository)獲得此副本,然後修改和送出;
二 集中式源碼管理
1)常用集中式源碼管理工具
software|free or not|client/sever or Distributed|merge or lock|platform| website
CVS | GPL/Free | client/server | Merge | all platform | http://www.nongnu.org/cvs/
SVN | Apache/BSD/Free | client/server | Merge or lock | all platform | http://subversion.tigris.org
Perforce | Commercial | cient/server | Merge or lock | all platform | http://perforce.com
Team Foundation Server | commercial | client/server | Merge or lock | windows | http://microsoft.com
2)特點
集中式源碼工具(Centerlized,Server/Client),開發人員本地隻有一個工作副本(working copying),每次送出(commit)都送出到所有開發人員公用的唯一的源碼倉庫(Server Repository),開人人員通過唯一的源碼倉庫(Server Repository)來共享代碼。
3)基本概念
Check out :獲得最新的工作副本,且記錄此時的版本為将要修改的工作副本的base;
Commit :将對本地副本的修改送出到伺服器的代碼倉庫;
4)基本過程
三 分布式源碼管理工具
1)常見的分布式的源碼管理工具
software|free or not|client/sever or Distributed|merge or lock|platform| website
Bazaar | GPL/Free | Distributed | Merge|all platform | http://wiki.bazaar.canonical.com/
Git | GPL/Free | Distributed | Merge | all platform | http://git-scm.com
Mercurial | GPL/Free | Distributed | Merge | all platform|http://mercurial.selenic.com/
2)特點
分布式的源碼管理工具,開發人員本地不僅有工作副本,而且還有自己的代碼倉庫。這樣任何兩個開發人員都可以通過本地自己的代碼倉庫的pull操作來 實作送出到真正的伺服器代碼倉庫前的代碼共享。 開發人員在送出到真正的伺服器代碼倉庫前可以有自己的多個版本;開發人員可以脫機工作,等有網絡時再pull到真正的伺服器的代碼倉庫;commit操作 更快;
3)基本概念
Update: 将本地的代碼倉庫的最新反映到本地的工作副本;
Commit :此時的送出僅僅是送出到開發本地的代碼倉庫;
push : 将本地代碼倉庫送出到遠端的另一個代碼倉庫;
pull : 将遠端的另一個代碼倉庫同步到本地代碼倉庫;
4) 基本過程
參考:
A Visual Guide to Version Control :http://betterexplained.com/articles/a-visual-guide-to-version-control/
Intro to Distributed Version Control (Illustrated) :http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/
comparison: http://versioncontrolblog.com/comparison/CVS/Git/Mercurial/Subversion/Visual%20SourceSafe/index.html
完!
作者:iTech
微信公衆号: cicdops
github:https://github.com/cicdops/cicdops