SVN,CVS,VSS工作机制比较, SVN安装及配置

调试了几天,感觉SVN要简单得很,前几天搞CVS一直有问题,很是郁闷,所有改用SVN了

SVN又有两种方式,svnserve服务方式和apache方式,

如果用svnserve方式的话推荐直接用Setup-Subversion-1.6.13.msi(目前最新版)

哪果用apache方式的话 推荐用VisualSVN-Server-2.1.5.msi(目前最新版)  ,比较用Subversion的话调试还是有点费劲

建立库: svnadmin create e:\svn\soft

svnserve支持多库多端口,好玩意:

sc create svnservice binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service --root e:\svn\soft --listen-port 3690" displayname= "svnservice" depend= Tcpip start= auto

启动服务:net start svnservice

删除服务:sc delete svnservice

密码文件配置:

-------svnserve.conf-------------------------------------

[general]
password-db = http://www.cnblogs.com/SVN-setup/passwd.conf   
anon-access = none   
auth-access = write   
authz-db = http://www.cnblogs.com/SVN-setup/authz.conf

--------------passwd.conf------------------------------------------

[users]  
w1 = 333
w2= 222
z3= 111

------------------authz.conf-----------------------------------

[groups]
g_vip = w1,w2
g_kaifabu =
g_xiaoshuobu =z3
g_daili =
g_kehu =

[/]
@g_vip = rw
* = r

[/downfile]
@g_vip = rw
@g_xiaoshuobu = r
@g_daili = r
@g_kehu = r
* =

 

 三者的优缺点分析:

CVS:它工作方式,可以使多个用户并行工作。这样对于正在编写软件的项目团体有利。但是版本控制某个项目下的一些核心文件比较困难,假如团队中的每个人都写文件的权限。这样往往会不小心的让核心代码被修改。


VSS:工作方式决定它就是一个文件只能由一个用户修改。其优点可以锁定核心代码(而且有目录授权机制__即可控件单个目录下载权限,防止核心代码被无关人员下载),缺点则是工作效率比较低。所以适合小团队进行开发。


SVN:两者的综合,呵呵,取两家之长。
还有它具有自己统一的客户端,在windows环境下,通过鼠标右键就可以进行操作,易用性明显强于前面两者。

 

三者机制:

 

VSS采用 锁定——修改——解锁 模型 。该模型限制太多,用户必须线性单用户工作。并发协作性差,如果两开发人员在同一时刻需要修改同一文件,则只能是等待某一开发人员修改并解锁后,再次从版本服务器获取最新更改并锁定。

 
CVS:采用 复制——修改——合并 模型。该模型相比VSS有了较大改进,多用户可以同时协作开发。并行性好。多用户可同时获取版本控制服务器上最新的同一文件,建立私用工作副本。并修改各 自的副本,最终将各自的副本合并成最终版本。不过麻烦之处就是必须手工核对合并操作的正误。还有就是某些情况(虽然很少)比如需要同时修改一张图片等使得 最终合并无法操作的情况,此时VSS的锁定——修改——解锁模型单线工作相对可以解决该问题。

 
SVN:默认采用CVS 复制——修改——合并 模型。但是自从1.2版本以后同时支持VSS的锁定——修改——解锁工作模式。兼并了两者的长处。

 


 重点SVN机制:


1.本地 副本未修改且是最新的。即本地文件中没有修改的内容,且版本控制服务器上也未有对此文件新提交的修改。此时SVN的commit 和update操作都不作任何反应。

 
2.本地副本已修改且是最新的。即本地文件有修改,但是版本控制服务器上没有对此文件新的提交修改。此时SVN的commit操作会成功提交。update操作不做任何事情。

 
3.本地副本没有修改且已经过时。即本地文件没有修改,但是版本控制服务器上对此文件已经有新提交修改。此时SVN的commit操作不作任何事情,update操作将会更新副本到最新的版本。

 
4.本地副本已修改,且也已经过时。即本地文件 已经有了修改,且版本控制服务器上的此文件也有人有了新的提交修改。此时commit提交操作失败。需要update操作,获取新版本,此操作会自动智能 合并新版本修改和本地版本内容修改。此过程中如果出现冲突,如修改了同一个地方的内容,则此时需要用户手工解决冲突。
 


SVN与VSS的比较


1. 支持重命名,这对 Java 开发来说非常重要。

为了得到更好的代码,开发中需要经常进行重构,重构就经常涉及到文件的重构名,而重命名中 VSS 中是不被支持的。

2. 开发的时候不一定要锁定。

一方面导致重构不方便,另一方面,不能离线开发,使用 SVN 就不同,可以带回家继续开发,回来后,提交就行了。

3. 多平台。

可以支持多个平台下的操作

4. 更好的客户端支持。

Eclipse 中的 VSS Plugin 不如它的 SVN Plugin 好用。一个在 Windows 下用的 SVN 客户端 TortoiseSVN 也比 VSS 的客户端好用(VSS 只有微软提供的一个 GUI 客户端)。

5. 更好地与外围工具集成。

各种各样的外围工具(主要是服务器端),满足多种需要。如果有需要,也可以自己写插件或管理脚本,开放的架构,允许我们这样做。

6. 方便。

一个例子:部署应用的时候,以前的做法是找出一个项目中修改过的文件,更新到服务器上去,现在可以在服务器上执行 svn export 命令,把代码库中的最新版本导出,完成部署(也可以替换回老版本)。

7. 速度与稳定性看起来都不错。

学习它的管理、它的工作方式,是值得的。而 VSS 是一个已经被逐渐抛弃的软件。如果时间不是多得没处用,那么就把时间花在最值得花的东西上面。


svn与cvs的比较


1 对重命名、删除文件的支持
    cvs:不支持本地文件重命名提交
            删除分remove和erase两种前者把本地和库中文件都删除 后者只是删除本地文件
            不能删除文件夹
   svn:支持文件重命名提交系统会提示删除旧文件,创建新文件
           删除本地文件提交 库中文件也被删除

2 对中文路径名的支持
   cvs:支持的比较好
   svn:要将权限控制文件保存为svn支持的UTF-8格式

3 本地文件与库的对应关系
   cvs:可以多对多
   svn:一个库可以有多个工作目录但一个工作目录只能对应一个库 虽然可以更改库位置但是要求很严格

4 库中文件存放方式
   cvs:完全用户可见方式与客户端文件夹结构完全一直(cvs生成文件除外)
   svn:与vss相似,看不到文件真正的内容

5 用户、权限管理
   cvs:管理员很难清楚的知道一个项目到底有多少个用户各用户的权限和密码是什么 只能用分组的方式管理用户而且密码和权限还是不清晰
   svn:查看、修改配置文件即可

6 权限
   cvs:有read、write、creat、none这四种权限,任何人不能删除文件夹(admin也只能跑到服务器上把相应文件夹残忍删除?我暂时只知道这个方法……汗-_-‖)
   svn:只有read、write、none三种权限 creat和delete权限好象和write是捆绑在一起的.

附:如何脱离SVN控制。

原理,删除目录下所有.svn文件夹,逐一删除的话不现实,可采用批处理。

你在项目的根目录创建一个记事本文件,然后吧这句话复制进去
for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"
然后保存,在吧记事本文件从命名叫 删除SVN信息.bat ,这时候要注意后缀名不是txt而是bat 了,然后双击这个批处理文件就可以解决

你可能感兴趣的:(SVN)