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. Office 2013 激活工具

    早上装机,顺便装了下Office 2013,界面还是不错的.网上找了下相关的激活工具. 发现还是独木成林做的最好呀,直接把别人的链接给拿过来好了,下载地址 http://pan.baidu.com/s ...

  2. android图片缓存(包含ReusableBitmapDrawable和BitmapPool)

    现在做的项目中,有用到一个开源的2D地图框架osmdroid,但是在项目中,使用还是有一些问题,例如,多个地图实例,会有独自的图片缓存,Activity onPause时,并不会释放图片缓存,如果多级 ...

  3. andriod增、删、改、查

    将数据库的增删改查单独放进一个包 */ package com.itheima28.sqlitedemo.dao; import java.util.ArrayList; import java.ut ...

  4. 03_汇编语言(n个数找最大值)

    程序要求: 先输入一个数n(0<n<=100),再输入n个无符号数K(0<=K<=65535),找出这n个数的最大值并输出 测试实例保证输入每个数之后,都会以回车结束 代码: ...

  5. python split()函数使用拆分字符串 将字符串转化为列表

    函数:split()Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list ...

  6. malloc calloc 和 realloc

    realloc()函数 原型:extern void *realloc(void *mem_address, unsigned int newsize); 语法:指针名=(数据类型*)realloc( ...

  7. 巧用开发者工具的控制台来调试页面中的js语句

    因为要弄某网页的一个自动登陆工具,所以需要对此网页中的元素利用js进行选取和操作,复杂的js选取如果直接在头脑中想很容易出错,而且一旦出错也不好判断错误原因. 而浏览器带的开发者工具的控制台功能,就给 ...

  8. 【Android Demo】加载.gif格式图片

    Android系统为了节省内存,一般不支持直接显示gif图片,即使你强制设置了,也只会显示图片的第一帧. 这个 Demo 是在网上看到的,是个思路,还是有些局限性,还是记录下,以后研究吧. 1.效果图 ...

  9. 【ASP.NET 问题】System.InvalidOperationException: 对象的当前状态使该操作无效 【大量表单数据提交】错误解决

    出现的问题描述: 当页面的数据量比较大时,出现异常,详细信息: System.InvalidOperationException: 对象的当前状态使该操作无效 问题的原因:出现这个异常的原因是因为微软 ...

  10. Windows事件ID大全

    51 Windows 无法找到网络路径.请确认网络路径正确并且目标计算机不忙或已关闭.如果 Windows 仍然无法找到网络路径,请与网络管理员联系. 52 由于网络上有重名,没有连接.请到“控制面板 ...