版本控制,就是利用版本控制工具(Version Control System,VCS)来管理项目从开始到定案的过程。
根据 2015 年 StackOverflow 公司进行的开发者调查,使用最广泛的两种版本控制工具是 Git 和 SVN。所以我们来探讨 SVN 和 Git 两种流行的版本控制工具的设计异同,以及在项目中的应用。
SVN
Apacha Subversion (SVN)是在企业中应用很广泛的版本控制工具,它最初开发的目的是未来代替老牌的 CVS(Concurrent Versions System)。
CVS 有以下几个缺点:
- CVS 不支持文件重命名。
- 如何您重命名一个文件的话,之前的修订历史记录就会丢失。
- CVS 没有原子性提交。
- 如果您提交很多文件,提交到一半的时候出错,那就有点麻烦了。
- CVS 只支持文本文件,无法提交二进制文件
SVN 解决了这几个问题,并加入了一些新的特性。
- SVN 对二进制文件的版本管理,使用了节省空间的保存方法,只保存和上一版本的不同之处
- 目录也有版本历史。
- 重命名吗、复制、删除也会保存在版本历史记录中。当然,要用 SVN 的重命名来操作
- 分支的开销比较小
在 Window 系统下,TortoiseSVN 是一款非常受欢迎的客户端软件,它的主要成功支持在于资源管理器整合得相当不错,可以在文件或者文件夹上有右键单击进行绝大多数 SVN 操作。
SVN 是一种集中式代码管理,集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前,必须从服务器获取代码,然后开发,最后解决冲突,提交。如果脱离了服务器,开发者基本上可以说是无法工作的。
在企业内部,使用 SVN 没有什么问题,服务器压力和内部带宽都能够承受所有员工一起操作 SVN。
但是在开源世界,这种架构方法就不行了,著名的开源软件的开发人数太多了。Git 的出现解决了这一问题。
Git
SVN 需要有一台重要服务器,所有分支(branch)、主干(trunk)和标签(tag)全都保存在这台中央服务器上。开发者需要提交代码时,需要保持跟中央服务器的网络连接。切换分支时会有服务器与本机的数据交互。
Git 是一个分布式版本控制软件,它改进了这一点,在每台安装有 Git 的机器上,都有所有的版本和历史记录,所以可以直接在本地切换分支。这带来的好处是创建和切换分支非常快,而且工程师在没有网络的条件下,也能够提交和管理自己的版本,等到有网络时再同步到公共库。
那么自己本地机器上的 Git 库,如何与其他人的代码库合并呢?
答:每个 Git 库都可以设定一些远程库地址(remote)。remote 是远程服务器的意思,表明本地代码库跟远程服务器代码库的一个对于关系。
从 Github 上克隆下来的代码库,会有一个名为 origin 的 remote。
- workspace:工作区
- Index:暂存区
- Respository:仓库区(本地仓库)
- Remote:远程仓库