开源,从熟悉版本控制软件开始

CVS(Concurrent Versioning System)是一个版本控制系统。版本控制系统一般被用来作为一个发展团队中软体发展循环的一部份,以便追踪并协调原始码的变化。

 

TortoiseCVS是一个让使用CVS更轻松并更直观的前端的客户端。它让开发人员直接从Windows Explorer和被CVS控制的档案一同工作。它仅仅是CVS客户端,不是伺服器。

subversion(简称svn)是近年来崛起的版本管理控制系统,是CVS的接班人。相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。

Subversion将文件存放在中心版本库里。这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况。这样就可以籍此将数据恢复到以前的版本,并可以查看数据的更改细节。

2009年,绝大多数CVS服务已经改用SVN。CVS已经停止维护。

 

Subversion的客户端有两类,一类是websvn等基于web的,一种是以TortoiseSVN为代表的客户端软件。前者需要web服务器的支持,后者需要用户在本地安装客户端,两种都有免费开源软件供使用。

 

TortoiseSVN 与Windows 外壳(例如资源管理器)无缝集成,你可以保持在熟悉的工具上工作,不需要在每次使用版本控制功能时切换应用程序。

 

在SVN之前,CVS是使用最广泛的版本管理软件。CVS——Concurrent Version System:协同版本控制系统,服务器上保存所有的开发项目,开发者们通过服务器上的共享目录,共同开发同一个项目,达到追踪所有的工作进度,而服务器上也会保存历史版本信息,以方便开发者的排错。

 

SVN与CVS对比的优点如下:

* 统一的版本号。CVS是对每个文件顺序编排版本号,在某一时间各文件的版本号各不相同。而Subversion下,任何一次提交都会对所有文件增加到同一个新版本号,即使是提交并不涉及的文件。所以,各文件在某任意时间的版本号是相同的。版本号相同的文件构成软件的一个版本。

* 原子提交。一次提交不管是单个还是多个文件,都是作为一个整体提交的。在这当中发生的意外例如传输中断,不会引起数据库的不完整和数据损坏。

*重命名、复制、删除文件等动作都保存在版本历史记录当中。

* 对于二进制文件,使用了节省空间的保存方法。(简单的理解,就是只保存和上一版本不同之处)

* 目录也有版本历史。整个目录树可以被移动或者复制,操作很简单,而且能够保留全部版本记录。

* 分支的开销非常小。

* 优化过的数据库访问,使得一些操作不必访问数据库就可以做到。这样减少了很多不必要的和数据库主机之间的网络流量。

 

Subversion的不足:

·        只能设置目录的访问权限,无法设置单个文件的访问权限。如有用户有设置单个文件的访问权限的需求,国内有单位可提供基于开源subversion的扩展版本。

·        另外,subversion的官方版本不支持ntfs文件系统的扩展属性,ntfs的扩充属性(如:安全属性、附加数据流(可选数据流)、加密数据流等)在提交、检出、导入、导出等操作过程中会丢失。现在国内有提供支持ntfs扩展属性的扩充版subversion、tsvn, 即,ntfs的扩充属性(如:安全属性、附加数据流(可选数据流)、加密数据流等)可和文件一起被提交、检出、导入、导出。

 

GitSVN都属于版本管理系统。

Git是一个分布式的版本控制系统。与CSV、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。作为一个分布式的版本控制系统,在Git中并不存在主库这样的概念,每一份复制出的库都可以独立使用,任何两个库之间的不一致之处都可以进行合并。Git最为出色的是它的合并追踪(merge tracing)能力。

注:早期Linux的开发人员是使用BitKeeper来管理版本控制和维护程序代码。2005年的时候,开发BitKeeper的公司同Linux内核开源社区结束合作关系,并收回使用BitKeeper的权利。Linus Torvalds开始着手开发Git来替代BitKeeper。Git在其它项目中也取得了很大成功,尤其是在Ruby社区中。目前,包括Rubinius和Merb在内的很多知名项目都使用了Git

github是托管平台,可以在上面托管各种git库,并提供一个web界面(GitHub is a web-based hosting service for projects that use the Gitrevision control system.)。 但与其它像 SourceForgeGoogle Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建的“pull request”机制向项目负责人申请代码合并。已经有人将GitHub称为代码玩家的MySpace。

注:开源项目可以免费托管,但私有库则并不如此。

GitHub 使用 git 分布式版本控制系统,而 git 最初是 Linus Torvalds 为帮助Linux开发而创造的,它针对的是 Linux 平台,因此 git 和 Windows 从来不是最好的朋友,因为它一点也不像 Windows。GitHub 发布了GitHub for Windows,为 Windows 平台开发者提供了一个易于使用的 Git 图形客户端

Subversion 属于集中式的版本控制系统

●每个版本库有唯一一个“官方地址”,每个用户都从这个唯一地址获取代码、数据;

●获取代码库的更新,也只能连接到这个唯一的代码库,同步以取得最新数据;

●提交必须有网络连接(非本地版本库);

●提交需要授权,如果没有授权,提交失败;

●提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;

冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。

Git属于分布式的版本控制系统

●众生平等,每个检出(checkout)的版本库,或者更准确的说每个克隆(clone)的版本库都是平等的;

●你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意;

●获取版本库的更新,可以来自任何源;

●提交完全在本地完成。无须别人给你授权,你的版本库你作主;

●当然你在你的版本库中的改动是否别人愿意合并到他们的版本库则是另外的一回事了;

●提交总是会成功,因为提交是在本地进行的么;

●甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个新的分支 ;

●冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行合并和冲突解决 ;

●Subversion的提交竞赛,在多人协作开发时,提交经常被打断;

●Git的每个用户就好像工作在独立的 Feature Branch(功能分支)中 ;

●Git的提交不会被打断,直到你的工作完全满意了,PUSH给他人或者他人PULL你的版本库;

●合并会发生在PULL和PUSH过程中,不能自动解决的冲突会提示您手工完成;

●Git也可以模拟集中式的工作模式;Subversion只有一种集中式的工作模式;

●Git也可以模拟集中式的工作模式 ,Git版本库统一放在服务器中;

●可以为Git 版本库进行授权:谁能创建版本库,谁能向版本库PUSH,谁能够读取(克隆)版本库;

●团队的成员先将服务器的版本库克隆到本地;并经常的从服务器的版本库拉(PULL)最新的更新;

●团队的成员将自己的改动推(PUSH)到服务器的版本库中,当其他人和版本库同步(PULL)时,会自动获取改变;

●你完全可以在脱离Git服务器所在网络的情况下,如移动办公/出差时,照常使用代码库;

●你只需要在能够接入Git服务器所在网络时,PULL和PUSH即可完成和服务器同步以及提交;

●Git提供rebase命令,可以让你的改动看起来是基于最新的代码实现的改动;

●Git有更多的工作模式可以选择,远非 Subversion可比。

 

实战使用请查阅帮助文档!

 

你可能感兴趣的:(开源,版本控制)