集中式版本控制系统:从svn到tfs
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的更多相关文章
- linux进阶之SVN集中式版本控制系统篇
代码上线--版本控制系统 SVN 集中式版本控制系统 git 分布式版本控制系统 SVN是subversion的缩写,即版本控制系统,是一个开放 ...
- Git学习系列之集中式版本控制系统vs分布式版本控制系统
不多说,直接上干货! Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央 ...
- git-版本管理工具的介绍+发展史+分布式版本控制系统和集中式版本控制系统的区别
一.版本管理工具的介绍: 1.备份文件: 2.记录历史: 3.多端共享: 4.团队协作: 二.版本管理工具的发展史: 1.cvs: 集中式 1985: 2.svn: 集中式 2000: 3 ...
- 关于分布式版本控制系统Git与集中式版本控制系统SVN的区别
我觉得最最主要的区别就是:分布式Git主要是在本地有各个历史版本,在不联网的时候,也可以更新到最新版本和查看过去的版本,而集中式SVN是所有人都将版本上传到中央服务器,当出现断网情况的时候,用户只有一 ...
- 集中式(CVS、SVN)VS分布式(Git)
集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器.中央服务器就好比是一个图 ...
- 版本控制系统之SVN和GIT的区别
版本控制器的作用: 1. 可以协同代码管理,让多人开发代码得以实现. 2. 回归到以前的任何一个时间点的代码处(好比:开始写了很多代码,后面有修改了一些,突然IDE崩溃,但是发现还是以前的代码更好,这 ...
- SVN集中式版本控制器的安装、使用与常见问题汇总
SVN是Subversion的简称,是一个开放源代码的版本控制系统,它采用了分支管理系统,集中式版本控制器 官方网站:https://www.visualsvn.com/ 下载右边的服务器端,左边的客 ...
- SVN 集中式版本控制软件
简介: 目前流行的版本控制软件中,SVN ( 集中式版本控制 ) 算是使用范围更广.且使用时间更早的一款了,现在 git ( 分布式版本控制 ) 更火爆一点. 一.安装svn [root@localh ...
- 细说SVN集中式版本控制器
svn全称Subversion,实现多人开发同一个项目时,对源代码进行管理的工具.在公司里边,一个项目是由多人同时在开发,大家在本地自己电脑开发php代码,完毕后就commit上传给服务器运行. 如 ...
随机推荐
- iOS网络-06-监听Iphone的网络状态
使用系统的方法来监听网络状态 系统的方法是通过通知机制来实现网络状态的监听 实现网络状态监听的步骤 定义Reachability类型的成员变量来保存网络的状态 @property (nonatomic ...
- iOS开发网络篇—Reachability检测网络状态
前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理.最好能监听设备的网络状态的改变,当设备网络状态连接.断开时,程序也 ...
- Windows 7 与 Vmware Ubuntu 15.10_64 共享文件夹
设置共享文件夹 安装/更新最新的vmware-tools 安装 在ubuntu 内部会打开DVD ,里面的压缩包中包含vmware-toole. 先解压 ...
- 团队管理_效率开会[持续更新ing]
1.明确开会目的,这个会议是用来解决什么问题,得出什么结果. 2.明确会议内容与流程,简要说明会议分几个部分,一步一步推进会议的进行. 3.保证参会人员守时参加,会议准时开始. 4.保证会议时间尽量为 ...
- ssh key scp命令 scp无密码传输
ssh ~/.ssh/目录下通常有个文件 [root@user .ssh]# ll 总用量 16 -rw-------. 1 root root 552 11月 16 02:48 authorized ...
- MySql查询语句中解决“该列没有包含在聚合函数或者groupby子句中”的相关问题方法
首先引入语句来源,表结构和数据如下: 需求是:查出员工(personname)在不同店铺(store)的总薪酬(salary),相同店铺输出store,不同店铺输出multi_store. 正确查询语 ...
- c# 反射简单使用
类库dll,将生成ExampleLib.dll文件 namespace ExampleLib { public class Example { public static string FuncA() ...
- Git 升级与基础适用
Git 升级 老方法 yum install git 目前centos6安装的 git 版本为1.7相对于 github 以及自己安装的 git 服务器都相对比较老,所以一般不适用此方法安装) 编译安 ...
- scons使用
1.概述 scons是一个Python写的自动化构建工具,和GNU make相比优点明显: A.移植性:python能运行的地方,就能运行scons B. 扩展性:理论上scons只是提供 ...
- [麦先生]在Laravel框架里实现邮箱验证---发送邮件
在经过一段时间的使用后,发现在项目中很多地方需要用到用户验证,以短信验证和邮箱验证为主流趋势,小麦总结了如果在Laravel框架中实现发送邮件功能,以后会陆续更上如何实现短信验证..... 在.env ...