论坛首页 综合技术论坛

如何正确使用VSS进行版本控制

浏览 11766 次
精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2010-06-26  
前不久跳槽到现在公司,这公司主要使用VSS进行版本控制。
觉得他们使用VSS的方法不对。

如有一个多人远程不断维护的项目,有四个主要的平行的branch,
dev, test, pre-production, production。
然后每个程序员还有自己的branch(分支) 如Application1_stoneskin.

修改有几种
1. production发现的bug.
2. 新需求的项目的开发.
3. 项目QA测试时发现的bug

有时会有几个projects(项目)同时开发,一般一人负责一个,不同进度,向上合并间也不同。

现在我们是在自己的branch修复bug或进行新项目开发,完成后checkin到dev 或test. test build后给QA测试。

build系统是visual build pro, 里面分别为test, pre_production, production创建了build脚本,build好后要手工deploy的相应的server.(估计是脚本还没实现完全自动化)

我发现有几个问题
1. 看上去有3到四个主干,不断的向production合并(merge)
2. 这几个branch是不是share的,如程序员A签入到release的代码,dev分支与程序员B分支都没得到。
3. QA测试完成后,要手工合并到pre-production里,测试并被批准后,再次手工合并到production里。 pre-prodution的测试基本是被忽略的。多次合并也是非常容易出错的。更关键的是,其实 prodution的代码是没有被测试过的。因为QA的是Test分支的代码。
4. 创建分支不是以项目而是以开发者为对象。

今天同老板与同事提到这些问题,老板说是目前方法的问题他们也明白,也是经过好几次该动才成为目前情况的。让我觉得有什么建议写给报告给他。

我对版本管理也没什么经验,就是觉得目前的方法用得很痛苦。
老板说他们有意图该用svn,但觉得svn也不能完全解决问题,(好像是多个项目同时开发,当时没听明白)

请板上有经验的兄弟们指点一二正确的适合此公司的方法。
随便聊聊就行。
   发表时间:2010-06-26  
还有在用VSS的公司啊。赶快跳吧:)

如果branch很多,并且经常merge的话,应该转GIT 或者HG。SVN的merge也很麻烦。
0 请登录后投票
   发表时间:2010-06-26   最后修改:2010-06-26
换了更好的工具也还是要规范一下开发制度。
比如你说的问题3,应该直接从测试分支获得发布版本,发布成功后再合并到production

分支应该以版本为单位创建,或一系列版本为单位创建,比如1.2.x,
对于项目型的开发,分支从哪里创建的,最终还要合并回去,除非你是盒装软件,需要不断维护老版本。
svn对分支的合并支持虽然不完美,但基本够用了,只是我发现好多人根本不知道怎么用。
根据你说的“完成后checkin到dev 或test. test”,我推断,你们没有用merge功能(我不知道VSS有没有merge功能),而是采用手工copy的方式提交到多个分支的,这是很危险的。

还有,我猜测你们的测试分支根本就没有存在的必要,打tag就可以达到目的了
5 请登录后投票
   发表时间:2010-06-26  
vss 有merge功能,但很多人用过一次后就不愿用了,
我们用一个叫beyond compare 3.0的工具手工merge
0 请登录后投票
   发表时间:2010-06-29   最后修改:2010-06-29
如何正确使用VSS进行版本控制 就是不使用VSS,尤其是和eclipse的结合。
0 请登录后投票
   发表时间:2010-06-29   最后修改:2010-06-29
mock1234 写道
vss虽然也支持merge,但是是辅助的。(换句话说,万一自己没有连上vss服务器就独自修改文件了,开发人员往往先重新get,然后重新做这个修改,即手工merge)。

你说的这个merge其实是更新。
典型的merge是 从另外一个配置库路径更新,也就是从本地工作拷贝对应的路径以外的其它路径更新,
而这个所谓的另外的路径一般指的就是分支了。
并行开发离不开分支,而分支又必须merge,所以merge是必须的功能。

vss是“悲观锁”,从根本上防止冲突,
svn是“乐观锁”,提交时才检查冲突,有冲突了才自动+手动合并,
对于大规模团队开发,显然乐观锁更好,毕竟两个人同时改了同一行代码的几率很低,
悲观锁不允许多个人同时修改同一个文件,这是无法接受的。
5 请登录后投票
   发表时间:2010-06-30   最后修改:2010-06-30
我们把分支间的代码移动叫merge。

VSS是可以多人同时checkout的。悲观锁只是默认值,可以修改的。很多人都不了解这点。
VSS默认是checkout后才能改文件。
你会看到有人checkout了,是个有用的功能。




daquan198163 写道
mock1234 写道
vss虽然也支持merge,但是是辅助的。(换句话说,万一自己没有连上vss服务器就独自修改文件了,开发人员往往先重新get,然后重新做这个修改,即手工merge)。

你说的这个merge其实是更新。
典型的merge是 从另外一个配置库路径更新,也就是从本地工作拷贝对应的路径以外的其它路径更新,
而这个所谓的另外的路径一般指的就是分支了。
并行开发离不开分支,而分支又必须merge,所以merge是必须的功能。

vss是“悲观锁”,从根本上防止冲突,
svn是“乐观锁”,提交时才检查冲突,有冲突了才自动+手动合并,
对于大规模团队开发,显然乐观锁更好,毕竟两个人同时改了同一行代码的几率很低,
悲观锁不允许多个人同时修改同一个文件,这是无法接受的。

0 请登录后投票
   发表时间:2010-06-30  

谢谢你写了这么多,终于看到一个用VSS的人了。
估计是我表述不清,你没理解我的意思。

补充几点
1. 大多数项目是 c# 用VS2005/2008
2. 我们的VSS是可以多人checkout的。你可以看到那些人checkout了。
3. 我能看到所有branch上的源码。
4. 我们是维护旧的需求变化很多的系统,同时会有俩三个需求并行开发,同时produciton的bug也需要fix.
5. 需要被引用的dll统一放在SharedDlls的地方,在vss里也分别有4个projects(branch?)prod,PreProd,Testing(QA),DEV
6. 万一自己没有连上vss服务器就独自修改文件了,最常发生的情况是你的改动被覆盖了(杯具)。
7. 关于四个主干,如图示

$App1
  |---App1_Prod
  |      |-many files and folders here
  |
  |---App1_PreProd
  |
  |---App1_QA
  |
  |---App1_Dev
  |---App1_Dev_Stone
  |---App1_Dev_Mike
  |---App1_QA_John

Stone 在 App1_Dev的stone 分支开发proj1
Mike 在 App1_Dev的stone 分支开发proj2
John在 App1_QA_John分支修复bug1

Stone 每日的改动checkin到App1_Dev_Stone,完成后Merge到App1_Dev,编译通过后,将自己对App1_Dev的改动逐条update到App1_QA, app1_dev是app1_QA的branch,你可以用vss的分支merge功能,但那个太狗屎了。所以我们都选择将App1_QA的文件checkout,利用beyondCompare工具逐个update文件。
Mike与John也做类似的步骤。

QA的测试是stream式的,先到先测,但很可能测的时候proj1,proj2,bug1都checkin及编译了。测完了project1将ticket标为通过。有时proj1的错误让proj2与bug1都没法通过QA测试。

人John得到消息bug1 QA pass了,就将改动check in 到App1_PreProd. 通过一定步骤deploy到preProd 服务器上(星期2或三)。
再过一天(星期四),将改动check in 到App1_Prod, 通过一定步骤deploy到Prodtion 服务器上。

情况大致就是这样的。。





mock1234 写道

vss默认的方式是自动加锁,一个人对某个文件check-out时其它人就不能再check-out了(但是可以check-out其它文件),而当他check-in的时候就会自动提醒所有人的本地开发工具立即更新文件。如果你只是用过svn的merge方式(它根本不能让你的开发工具做到这种check-out/check-in即时响应),可能对vss默认的那种加锁方式会套用你原来的做法,生硬地想出什么“四个主干merge”的诡异说法。

vss虽然也支持merge,但是是辅助的。(换句话说,万一自己没有连上vss服务器就独自修改文件了,开发人员往往先重新get,然后重新做这个修改,即手工merge)。

如果在一个解决方案中并不开发各个工程源码,例如工程a需要引用工程b,但是项目决策者决定只能让开发a的工程师引用b的release结果而不能引用原始工程,那么就可以把所有的release放在解决方案中一个目录(虽然上vss支持自动将一个目录下的一些文件覆盖到其它的目录下,但是所有工程都引用一个目录其实更好),每当更新了它的内容才让开发人员get它(例如设置开发工具的参数,使得每当打开开发工具都自动get)。在一些很人眼中这很自然。

你的第4点说对了,开发者被人当盗贼防着,不让他们相互看到源代码。但是这跟版本管理工具没有关系。我参与过的许多项目,100个人、10几个项目在一个解决方案里,也是可以相互看到源代码的。所以这不是工具的问题,是管理者的问题。你的许多问题都是对管理不理解,不要算在工具的头上。根本是4个独立的产品来管理的(以便让他们根本不能互相看到源代码),你还纠结什么“4个主干然后merge”是不是太对这个公司的组织模式自作多情地夸张啊?!


而如果并不是防着开发人员相互看到源代码,却还要这样费一道手续,什么“check-in到release里边、再次手工合并到production里”之类的,那么这就是开发人员素质很低造成的了。在使用vss支持开发时,虽然开发工具总是自动地check-out,但是只有在开发人员手工在项目上选择check-in功能时才将所有自己修改了的文件check-in,或者是在关闭开发工具时(也有提示确认信息)才check-in。如果有人修改了别人的文件但是不check-in,别人干着急。同时,使用vss的人需要立一条规矩:check-in之前必须至少保证编译通过。或许一个公司总有一些没有职业道德的程序员经常check-in一些根本无法编译通过的源代码到vss,然后就下班走人了。如果没有这种人,那么就没有任何问题了!

0 请登录后投票
   发表时间:2010-06-30  
老板正考虑用Vault或Rational Team Concert代替VSS
lich0079 写道
如何正确使用VSS进行版本控制 就是不使用VSS,尤其是和eclipse的结合。

0 请登录后投票
   发表时间:2010-07-04  
用过vss2008再说VSS是杯具不迟,不知者不怪,但乱评就不对了。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics