06年进公司的时候,我们没有使用版本控制系统,所有代码都在部门经理的电脑上放着,谁要改什么代码就过去要一份最新的,改好之后再放回去,感觉好原始。据说之前是用过一段时间微软的vss(visual.source.forge),曾经也搭建过vss服务器,但是中间不知道什么原因中断了,也就没有继续坚持了,可能是当时人还少,整个软件研发也就是10个人左右。所以没有使用版本控制也没有出什么大问题。

进公司之前,由于在matin fowler的《重构》中有提到版本控制系统,我就在自己电脑上搭建一个cvs服务器玩,完成一个小功能就提交一次,写好log,写错了再撤销回来,切实感觉到了有版本控制系统的好处,他就像是一个时光机器,可以让我回到之前的任何一个时间点。我再也不用不断的使用winrar压缩来做备份了。

所以在进公司半年,在摸清了部门的运转机制之后,就向领导提出提出希望可以引入版本控制系统。然后领导就同意了(没想到这么顺利),然后就是版本控制系统的选择问题,比如是继续使用当年的vss,还是寻找开源替代品,比如cvs或者其他的什么,现在已经不记得当年是如何选择的,不过我自己在使用cvs的时候确实是有一些不愉快的经历,库文件损坏。最终选择了svn,那会svn已经出来五年多了(2007),已经是比较稳定了,而且除了命令行,已经有各种插件/图形化工具可以使用。比如我们就使用visutal svn来搭建服务器,而使用tortoiseSVN来做客户端,然后再使用Visual SVN提供的vs的插件来解决和vs集成的问题,基本上整个流程就跑通了。然后就是组织培训,在组织内宣贯,这样前后大概过了一个季度,才陆续的将以前的代码迁移到svn服务器上。

在搭建服务器的过程中,一个比较明知的决定就是使用与服务器来同一用户管理,这样就可以同一svn和ftp两套系统的用户管理。visualSVN本身不支持域用户,所以需要另外搞个插件来做域用户与svn用户的映射,具体是什么有点不记得了。

这样服务器跑起来之后,稳定使用了三年多,随着公司的扩张,部门的人越来越多,新项目也越来越多,这时候问题就出来了,由于代码权限的问题,之前一直都是由部门经历兼职做配置管理员,由他负责svn的项目库创建,权限的分配等,现在有八九十号人的权限需要管理,差不多每天都有人需要申请svn的权限:创建项目库/分配老代码的读权限/写权限,等等。这样会占用他较多的时间,让一个部门经理来配置管理员的工作确实是有点浪费。

这个问题的核心在于svn不支持分级授权:比如如果给一个目录或者库指定了一个管理员,然后就可以由这个管理员来管理该库下面的所有目录的权限。

如果能够支持分级授权,那么部门经理的管理工作就会少很多,他只要负责创建库,然后分配管理员,其他的事情都可以由管理员来完成,这样就会比较理想。所以我们就开始重新寻找新的替代品。最终选择的是微软的TFS。之所以选择TFS一方面也是因为我们原来的那个bug管理系统不好用,也迫切希望能有一个新的替代品,而TFS是一个一体化的解决方案,可以在上面做版本控制,登记缺陷,做项目计划,发布会议通知,组织评审等,而且每个项目还可以有的门户。确实功能比较强大,然后,刚好他的版本控制系统有分级授权的功能。这就圆满了。

当然,搭建tfs服务器是一个比较麻烦的事情,这点去网上找相关文章吧,这里就不细说了,总之用微软一般就用全套,从他的服务器到数据库服务器到sharepoint到tfs服务器。

切换过去这两三年使用起来也还算平稳,没出什么大乱子。

另外提一下,不管是svn还是tfs,这种集中式的版本控制系统有一个问题,服务器如果挂了,大家就没法工作了,特别是我们是公司是两个中心模式,两个研发中心通过vpn相连,如果偶尔网络不好,那么另外一个研发中心的同事基本上就很多事都干不成了。这种问题对于中央式仓库没有什么很好的方法。而且目前网络中断的情况没有经常发生,所以也就没有成为内部主要矛盾。

集中式版本控制系统:从svn到tfs的更多相关文章

  1. linux进阶之SVN集中式版本控制系统篇

    代码上线--版本控制系统 SVN             集中式版本控制系统 git                 分布式版本控制系统 SVN是subversion的缩写,即版本控制系统,是一个开放 ...

  2. Git学习系列之集中式版本控制系统vs分布式版本控制系统

    不多说,直接上干货! Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央 ...

  3. git-版本管理工具的介绍+发展史+分布式版本控制系统和集中式版本控制系统的区别

    一.版本管理工具的介绍: 1.备份文件: 2.记录历史: 3.多端共享: 4.团队协作: 二.版本管理工具的发展史: 1.cvs: 集中式   1985: 2.svn:  集中式    2000: 3 ...

  4. 关于分布式版本控制系统Git与集中式版本控制系统SVN的区别

    我觉得最最主要的区别就是:分布式Git主要是在本地有各个历史版本,在不联网的时候,也可以更新到最新版本和查看过去的版本,而集中式SVN是所有人都将版本上传到中央服务器,当出现断网情况的时候,用户只有一 ...

  5. 集中式(CVS、SVN)VS分布式(Git)

    集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器.中央服务器就好比是一个图 ...

  6. 版本控制系统之SVN和GIT的区别

    版本控制器的作用: 1. 可以协同代码管理,让多人开发代码得以实现. 2. 回归到以前的任何一个时间点的代码处(好比:开始写了很多代码,后面有修改了一些,突然IDE崩溃,但是发现还是以前的代码更好,这 ...

  7. SVN集中式版本控制器的安装、使用与常见问题汇总

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,它采用了分支管理系统,集中式版本控制器 官方网站:https://www.visualsvn.com/ 下载右边的服务器端,左边的客 ...

  8. SVN 集中式版本控制软件

    简介: 目前流行的版本控制软件中,SVN ( 集中式版本控制 ) 算是使用范围更广.且使用时间更早的一款了,现在 git ( 分布式版本控制 ) 更火爆一点. 一.安装svn [root@localh ...

  9. 细说SVN集中式版本控制器

    svn全称Subversion,实现多人开发同一个项目时,对源代码进行管理的工具.在公司里边,一个项目是由多人同时在开发,大家在本地自己电脑开发php代码,完毕后就commit上传给服务器运行.  如 ...

随机推荐

  1. IOS之UI--小实例项目--综合使用

    前言: 本博文是基于前一个小实例项目:IOS之UI--小实例项目--添加商品和商品名 进行继续综合学习积累的. 内容大纲 01-综合使用01-plist的使用 02-综合使用02-模型取代字典的好处分 ...

  2. PHPExcel中open_basedir restriction in effect的解决方法

    用PHPExcel做导出execl的时候发现在本地没有问题,但是把网站传到租用的服务器的时候就报错,具体如下: Warning: realpath() [function.realpath]: ope ...

  3. python sorted

    python列表排序 python字典排序 sorted List的元素可以是各种东西,字符串,字典,自己定义的类等. sorted函数用法如下: sorted(data, cmp=None, key ...

  4. Android Design Support Library——Floating Action Button

    Floating Action Button是一种悬浮操作的圆形按钮,继承自ImageView,可以通过android:src或者ImageView的任意方法,来设置FloatingActionBut ...

  5. 以前写的关于Linux C/C++的博客

    以前在CU写的关于Linux C/C++的博客 http://blog.chinaunix.net/uid/25909722/cid-24318-list-1.html

  6. CI框架SESSION重写

    这个是我平时用的是 PHP 自己的 Session 机制,是真正的 PHP Session,存储在服务器端,而不是用的 cookie 接口完全兼容于 CI 2.0.x 的 Session 类库,也就是 ...

  7. 更改ubuntu下mysql的密码

    1.首先,进入环境中去,即 mysql  -u  root  -p   ,然后输入原始密码 2.此时会出现 mysql > 3.开始修改密码: mysql >   use  mysql ; ...

  8. java 接收 char字符型

    import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Scanner; public clas ...

  9. 工作中常用的Linux命令:目录

    工作两三年,每天都和Linux打交道,但每每使用Linux命令的时候却会像提笔忘字般不知如何使用,常常查手册或到网上找资料.此系列文章主要是为了方便自己在使用命令时随时可查阅.鄙人才疏学浅,文中若有任 ...

  10. excel if判断时间段早晚班

    =IF(OR(HOUR(B3)={9,10,11,12,13,14,15,16,17,18}),"早班","晚班")