一、Git
Git,免费、开源分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目版本管理,是Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
分布式相比于集中式的最大区别,在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。作为一个分布式版本控制系统,在Git中不存在主库这样的概念,每一份复制出的库都可以独立使用,任何两个库之间的不一致都可以进行合并。
优点:
- 适合分布式开发,强调个体,无需别人授权。
- 公共服务器压力和数据量都不会太大。
- 速度快、灵活。
- 任意两个开发者之间可以很容易的解决冲突。
- 支持离线工作。
- 每一次提取操作都是对代码仓库的一个完整备份。
缺点:
- 资料少(起码中文资料很少)。
- 学习周期相对而言比较长。
- 不符合常规思维。
- 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
下图为Git的开发流程图,可作为参考进行理解。
二、GitHub
GitHub,托管各种git库,并提供一个web界面,最独特的地方在于从另一个项目进行分支的简易性。访问地址为:https://github.com/
GitHub 使用 git 分布式版本控制系统,而 git 最初是为帮助Linux开发而创造的,针对Linux 平台。GitHub 发布了GitHub for Windows,为 Windows 平台开发者提供了一个易于使用的 Git 图形客户端。
GitHub for Windows 是集成了自包含版本的 Git,bash 命令行 shell,PowerShell 的 posh-git 扩展。GitHub 为 Windows 用户提供了一个基本的图形前端去处理大部分常用版本控制任务,可以创建版本库,向本地版本库递交补丁,在本地和远程版本库之间同步。
为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建的“pull request”机制向项目负责人申请代码合并。
三、SVN
SVN,即Subversion的简称,一个开放源代码的集中式管理版本控制系统,采用了分支管理,它的设计目标就是取代CVS。SVN就是用于多个人共同开发同一个项目,共用资源的目的。集中式版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们通过客户端连接到这台服务器,取出最新的文件或者提交更新。
SVN服务器有2种运行方式:独立服务器和借助apache运行。两种方式各有利弊,用户可以自行选择。
优点
-
管理方便,逻辑明确,符合一般人思维习惯。
-
易于管理,集中式服务器更能保证安全性。
-
代码一致性非常高。
-
适合开发人数不多的项目开发。
-
大部分软件配置管理的大学教材都是使用svn。
缺点
-
服务器压力太大,数据库容量暴增。
-
如果 不能连接到服务器上,基本上不可以工作,就不能提交,还原,对比等等。
- 易发生冲突。
-
不适合开源开发(开发人数非常非常多,但是 Google app engine就是用svn的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。
下图为集中式管理的工作流程:
四、总结SVN和Git的重要区别
-
Git是分布式,SVN是集中式;
- Git提交速度快,SVN速度慢;
-
Git把内容按元数据方式存储,SVN是按文件;
-
Git分支创建、合并简单,每个工作成员可以任意在自己的本地版本库开啟无限个分支。SVN分支即版本库中另外一个目录,这个目录拥有完整的实际文件,改动分支即影响“全世界”;合并分支需要手动执行命令,易出现遗漏;
-
Git的内容完整性优于,内容存储使用SHA-1哈希算法,保证了内容的完整性,确保磁盘故障和网络问题时破坏降低。