作业四:上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下Microsoft TFS、GitHub、Trac、Bugzilla、Rationale,Apple XCode)?

一、CVS 是一个C/S系统,是一个常用的代码版本控制软件。主要在开源软件管理中使用。与它相类似的代码版本控制软件有subversion。多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。但是由于之前CVS编码的问题,现在大多数软件开发公司都使用SVN替代了CVS。

CVS(Concurrent Versions System)版本控制系统是一种GNU软件包,主要用于在多人开发环境下源码的维护。Concurrent有并发的、协作的、一致的等含义。实际上CVS可以维护任意文档的开发和使用,例如共享文件的编辑修改,而不仅仅局限于程序设计。CVS维护的文件类型可以是文本类型也可以是二进制类型。CVS用Copy-Modify-Merge(拷贝、修改、合并)变化表支持对文件的同时访问和修改。它明确地将源文件的存储和用户的工作空间独立开来,并使其并行操作。CVS基于客户端/服务器的行为使其可容纳多个用户。这一特性使得CVS成为位于不同地点的人同时处理数据文件(特别是程序的源代码)时的首选。
所有重要的免费软件项目都使用CVS作为其程序员之间的中心点,以便能够综合各程序员的改进和更改。这些项目包括GNOME、KDE、THE GIMP和Wine等。

SVN是近年来崛起的版本管理工具,相当于是CVS的接班人。SVN是一种集中式的源码管理软件,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。

举例说明经典的svn工作流程:
开始新一天的工作:
1)从服务器下载项目组最新代码。
2)进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。
3)下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。

 

二、TFS(Team Foundation Server )是微软开发的项目管理工具,是 Microsoft 应用程序生命周期管理 (ALM) 解决方案的核心协作平台。 不论在本地还是在云中,TFS 均可支持灵活的开发实践、 多个 IDE 和平台,并为您提供有效管理整个 IT 生命周期的软件开发项目所需的工具。

TFS是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,它构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问。TFS为淘宝提供海量小文件存储,通常文件大小不超过1M,满足了淘宝对小文件存储的需求,被广泛地应用在淘宝各项应用中。它采用了HA架构和平滑扩容,保证了整个文件系统的可用性和扩展性。同时扁平化的数据组织结构,可将文件名映射到文件的物理地址,简化了文件的访问流程,一定程度上为TFS提供了良好的读写性能。

特性:

1. 采用扁平化的数据组织结构
2. 使用HA架构和平滑扩容
3. 支持多种客户端
4. 支持大小文件存储
5. 可为外部提供高可靠和高并发的存储访问
6. 支持大文件功能
7. Resource Center Server,用于管理TFS集群的用户资源配置
8. TFS服务程序开发框架,统一TFS网络客户端库,并新增异步回调功能
9. 优化数据流,让写请求尽可能均匀的分布在不同的DataServer