天天看點

[SCM]源碼管理 - 簡介

一 源碼管理工具

 源碼管理(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)基本過程

[SCM]源碼管理 - 簡介

三 分布式源碼管理工具 

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) 基本過程

[SCM]源碼管理 - 簡介

參考:

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​​

繼續閱讀