公司强制使用VSS,用SVN惯了,很不爽。整理了下面的对比,请指正
VSS与SVN的对比整理
伪秀才
Shicheng.yan@gamil.com
2008-9-27
|
项目
|
VSS
|
SVN
|
备注
|
|
原子性提交
Atomic commit
|
不支持
|
支持
|
SVN无论批量提交包含多少文件修改,只有当全部文件修改都成功入库,该提交才变得有效,才对其他用户可见;否则,无论任何原因造成中断,SVN都会自动“回滚”(rollback)操作。换一个说法,SVN保证所有的修改要么全部入库生效,要么个也不入库,即对版本库不作任何修改。
|
|
重命名
|
不支持
|
支持
|
这对Java和C#开发很重要,为了得到更好的代码,开发中需要经常进行重构,重构就经常涉及到文件的重构名,有时会对文件重命名再提交。
|
|
最小提交块
|
文件
smallest commit block is a file
|
行
a line is the smallest commit block
|
最小提交块是文件,这样通过看历史很难找出某次checkin到底checkin了什么东西
|
|
安全性
|
基于文件系统共享实现对服务器的访问,需要共享存储目录
|
SVN服务器有自己专用的数据库,文件存储不采用“共享目录”方式,所以不受限于局域网。客户端可以是不同的平台,都是通过tcp/ip和特定端口来访问SVN服务器,有不同安全等级的访问协议可供选择
|
是不是每次使用VSS的时候得登记一次服务器?麻烦了吧
|
|
离线开发操作
|
需要执行几个步骤也可以安全入库,但麻烦
|
不需要另外操作
|
|
|
模式
|
主要采用独占模式(checkout,modify,checkin)也可以使用(multi_checkout,modify,checkin,merge)模式。
|
使用update,modify,commit方式。每个人可以修改自己可以访问的任意代码,代码不会被一个人单独占用。可以多人修改同一份代码,并且每个人的修改结果都不会丢失。如果提交时SVN没有发现冲突,则代码可以直接入库。否则SVN会让你手工合并
|
|
|
Internet网络和远程协作
|
VSS8.0支持
|
更适合基于互联网协作开发,速度快
|
|
|
支持平台
|
Windows
|
Windows,Linux,Unix
works on windows, linux, unix, and even macs and also java which makes it ultimaly portable
|
|
|
支持开发工具
|
VS6,
VS.NET2005,
VS.NET2008(不过有个bug)
VSS Plugin for Eclipse
|
SVN for VS.net 2005 Plugin-AnkhSVN,
也支持vs.net2008,
SVN for Eclipse
|
|
|
客户端
|
VSS client
|
Windows下:TortoiseSVN,Linux下:RapidSVN
|
|
|
自动合并
|
据说VS2005中也支持了?
|
提供,如果不能自动合并,可以手工修改冲突
|
|
|
|
|
多版本分支的合并
|
|
|
版本分支
|
有
但在操作中VSS首先要做项目共享,引入要分支的项目或文件然后做分支操作
|
有
自动建立分支
|
|
|
异地开发
|
支持
|
支持
|
|
|
操作的便利性
|
安装、配置、使用均简单,很容易上手使用
|
安装、配置较复杂,但使用简单,只需对配置管理做简单培训即可
|
|
|
版本管理
|
手工
通过label来自定义一个版本号,可以解决部分项目管理的问题,但这是远远不够的,当一个产品根据用户需求产生一系列不同的项目版本时使用VSS将难以管理
|
提交时记录版本号,自动分支管理
|
VSS版本发行时只能手工挑选对应的版本文件进行发布。
|
|
与外围工具集成
|
|
各种各样的外围工具(主要是服务器端),满足多种需要。如果有需要也可以自己写插件或管理脚本,开放的架构,允许我们这样做。
|
|
|
费用
|
商业
proprietry
|
开源免费
open source (Apache/BSD-style license.)
|
|
微软自己不用VSS,它用啥?SouceDepot!
不同意很多人说的“工具够用就行”,就算是两件工具可以完成完全一样的功能,其设计哲学和使用方式上肯定也会有区别。如果是每天必用的工具,不够便利的,或者蹩脚的使用方式会持续的影响你工作时的心情,而谁又愿意每天工作时都被工具逼得心情不好?
http://www.javaeye.com/post/583660?page=1
使用VSS,如果我周末回家办公,怎办?把代码全部checkout,再通过vpn连加VSS。
反对:如果我是甲方,要审查你的代码,svn可以直接通过http浏览代码,非常轻松,而VSS,还得装VSS客户端(license谁给?),还要用VPN连到乙方的局域网里(人家也得要有VPN啊,许多小公司网络是租用的没有vpn)
Subversion比VSS强的一个地方是如果文件改名了,以前的历史记录不会被丢失。呵呵,打个比方,Subversion就像一个聪明的警察,尽管罪犯虽然改名或整容了,但是他的前科还是被这个聪明警察给顺藤摸瓜给记录下来了。而VSS就像一个有点健忘的警察,罪犯名字一改,VSS就完全忘记了他的前科。
VSS 和 SVN/CVS 在锁定和非锁定上的处理源自应用环境的不同.
VSS 产生于微软这样的 close source 的企业, 而在这样的企业里, 开发软件时, 团队成员间通常就在一个办公室里, 文件的锁定/解锁的协调相对容易, 任务也许可以真的分配到一个人就在一个文件上工作; 但, 在开源世界里, 开发人员来自世界各地, 在世界的每个角落/不同时间里参与着项目的开发, 如果你今天在北京把一个文件锁住, 晚上没做完, 没提交, 然后睡觉去, 我们美国的同志们若也参与这个功能的开发, 那么在北京时间凌晨 2:00 的时候, 你尚在美梦中, 而那边已是早上 9:00 的工作点, 这样就没法对这个文件进行修改, 只能等到你呼呼睡醒, 北京时间 9:00 上班, 而美国那边已经是 16:00, 浪费大半天, 该下班了...
那么我们在公司里, 是不是其实应该很适合用 VSS 呢? 举个简单的例子就知道不行了 - g20 项目中我们有个 g20.js 的文件, 所有 ajax 相关的功能都在这个将近 6K 行代码的文件里完成, 我们的同学们经常需要同时并行着做两个以上的功能, 这使得我们不可能采用锁定的模式. 而 SVN 的拷贝-修改-合并模式并没有在现实中带来想像中的那么多 "冲突" - 只要功能拆解得当, 不会出现两个人同时修改同一个文件同一行的情况, 最常见的情况就是你在 200 行后加了个 function, 我在 300 行后编辑了一些条件判断.