一 源码管理工具
源码管理(SCM/Source Code Management),也称为版本控制系统(VCS/Version Control System)。
1)为什么我们需要SCM/VCS
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)基本概念
服务器(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