SVN 初步

总是看到版本管理多么重要多么重要的,自己也想试一下到底是怎么回事,上网一通 搜索,发现其中两个非常出名:CVS,SVN。 于是对比了一下,发现 SVN 的评价更加优秀,属于后起之秀,有取代 CVS 之势,所以就下载了 SVN 测试一下。

      SVN 的服务器及客户端都有许多版本,主要的下载链接如下:

      服务器和程序下载 : http://subversion.tigris.org/getting.html#binary-packages
Windows常用客户端TortoiseSVN:http://tortoisesvn.net/downloads
AnkhSVN(Visual Studio插件): http://ankhsvn.open.collab.net/
Subclipse(Eclipse插件):          http://subclipse.tigris.org/
SCPlugin(Mac OS x客户端):    http://scplugin.tigris.org/

1:下载 SVN 服务器端,我们这里下载官方的服务器最新版

      下载地址为:http://subversion.tigris.org/files/documents/15/46531/Setup-Subversion-1.6.5.msi

      其中,页面: http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100 提供了不同版本的服务器端

        我们这里选择 for Apache 2.2.x 的版本,当然可以不下载 msi 安装版本,可以下载 svn-win32-1.6.6.zip ,效果是一样的,只是免安装版本需要在 windows 环境变量 PATH中添加 svn bin 目录路径,才能运行 svn 命令。不过,我在 win7 上测试的时候,也不知出现了什么 bug, 免安装版本无法创建服务,所以这里还是下载 msi 安装版。

2:下载 TortoiseSVN 客户端,TortoiseSVN 与 windows 资料管理器相结合,操作非常方便,不爱敲命令的就下载这个版本吧。不过注意,如果用的是 64 位机器,务必要下载 64 位版,否则更本不能运行。

    32 位:http://downloads.sourceforge.net/tortoisesvn/TortoiseSVN-1.6.6.17493-win32-svn-1.6.6.msi?download  

      64 位: http://downloads.sourceforge.net/tortoisesvn/TortoiseSVN-1.6.6.17493-x64-svn-1.6.6.msi?download

      下载完安装,可以不用重启。但是有些功能必须重启才能使用,不过鉴于我是初步试用,不可能用得着什么高级功能,所以就没有重启。

3:SVN 最快速的入门,可以查看链接: http://www.subversion.org.cn/?action-viewnews-itemid-1 ,我这里就不具体说了,总结一下过程及自己遇到的问题:

     1):建立版本库,命令行输入 >svnadmin create E:\SVN\jmr ,这一步可以使用 TortoiseSVN 图形化完成:在目录E:\SVN\jmr 下"右键->TortoiseSVN->Create Repository here...“, 然后可以选择版本库模式, 这里使用默认即可, 然后就创建了一系列目录和文件。

     2):启动 SVN 服务器

     方法1:在命令行下输入 >svnserve –d –r E:\SVN\jmr,还要关闭命令行窗口,否则 SVN 服务会停止运行。

      方法2:为了避免每次开启服务都要如方法1所示,非常麻烦,这里可以将 SVN 服务与 Windows 服务绑定,并且设置其开机自动运行,这样就不用每次在命令行使用方法1了,这里使用 Windows 的 sc 命令:

         sc create SVNService binpath= "C:\Program Files (x86)\Subversion\bin\svnserve.exe --service -r E:\SVN\jmr" displayname= "SVNService" depend= Tcpip start= auto

       其中,binpath= 后面的内容为 svnserve.exe 路径, -r E:\SVN\jmr 为刚才上面创建的代码库要目录,服务名称起名为 SVNService,这个可以自己起名,创建服务成功后,该名字会在 控制面版->管理工具->服务 中显示出来。

     运行该命令,则创建 SVN 服务成功,然后使用 >net start SVNService 命令启动服务,这一步也可以在 控制面版->管理工具->服务 中右键选择属性启动。不过比较奇怪,我使用免安装版本在我的 win7 64 机上创建服务后,无论如何都无法启动成功,最后用了安装版的成功了,也不知是什么 bug,不过在 XP 上没有发现任何问题。

     如果想删除服务,使用命令> sc deleter servicename 进行删除。  

    3):配置用户权限

      (1)进入 E:\SVN\jmr\conf,用记事本打开 svnserve.conf,修改:

          [general]
anon-access = none       
auth-access = write

          password-db = passwd

          authz-db = authz

      其中,# 号表示注释,去掉 # 可使配置生效,需要注意的是,每一项配置的前面都不能留有任何空格,否则会出错。anon-access = none 表示不充许匿名用户访问,设置成 read 则充许匿名用户读操作。 auth-access = write 表示授权用户可以进行写操作。 password-db = passwd 表示用户及其密码的存放文件,这里可以修改成其它文件。如自己建立一个文件 passwd-me,然后修改成 password-db = passwd-me,则 SVN 服务器进行验证的时候就会在 passwd-me 中进行验证用户,当然也可以将文件存入在别的目录,只要这里指定具体路径即可。 authz-db = authz 表示用户对代码库中目录的访问权限的设置文件。

    (2)打开文件 passwd,建立用户如下,用户 zcl,密码为514514,用户 yang,密码为123123,用户 sun,密码为 123123。

      [users]
zcl = 514514
yang = 123123
sun = 123123

      (3)打开文件 authz,设置用户对代码库中不同目录的访问权限。

    为了目录结构清晰,这里先建立几个目录,在 E:\SVN\jmr\conf 中新建一目录 users 用于存放不同用户的私人目录。建立如下 E:\SVN\jmr\users\zcl,E:\SVN\jmr\users\yang,E:\SVN\jmr\users\test。/users /zcl 为用户 zcl 的目录,/users/yang 为用户 yang 的目录,E:\SVN\jmr\users\sun 为用户 sun 的用户,/users/test 用于测试。

     修改 authz 文件如下所示:

[groups]
admin = zcl
members = sun,yang

#[group] 为建立用户组,这里组名可以随便起,admin 组做为管理员,用户成员为 zcl,组 member 成员为 sun 和 yang

[/]
* =
@admin = rw

#其中,[/] 表示代码库根目录,* =   后面什么都没有,表示其它用户没有任何权限, @admin = rw 表示组 admin 的成员对根目录有读写权限。用户对目录的权限是继承的,这里设置 admin 组中成员对根目录有读写权限,则 admin 组中的成员对根目录下所有目录都具有读写权限,于是用户 zcl 对代码库中所有目录都有读写权限。

[/users/test]
@members = rw
* =

#组 member 中的成员对 /users/test 目录具有读写权限,其它用户没有任何权限。这里 * = 放置的顺序没有影响。

#这里比较奇怪,我还没有仔细看 SVN 对目录的控制权限,本来我以为,上面在 [/] 设置了 admin 的权限后,这里就不用设置了,结果表明, * = 会屏蔽掉所有其它人的权限。所以,如果设置了 * = 则必须对所有想要授权的用户都列出来。这里只有组 memeber 中的成员可以读写,admin 组无权限,所以还要在上面加上一条 @admin = rw *********************这回总算对权限设置有比较清晰的了解了。。。

[/users/yang]
* = r
yang = rw

[/users/sun]
* = r
sun = rw

[/users/zcl]
zcl = rw

#如上设置了每个用户对自己的目录具有读写权限,其中,其它人对 /usrs/yang 及 /users/sun 目录具有读权限。

#示例中还给出了如下更具体的设置权限方法:

[repository:/baz/fuz] ,但是,我使用 [jmr:/usrs/yang] 这种方式设置,却无论如何都没有成功,这个还得查看一下资料,到底该如何对具体的代码仓库设置不同的权限。************

4)进行测试,向代码库中导入代码

    我在目录 E:\test 中有一个文件 test.txt,在该目录中右键->TortoiseSVN->Import...    然后在弹出的对话框中,在 URL of Repository 中输入 svn://localhost/users/test,在下面的 Import message 中输入导入消息,可以自己写上有意义的信息。其中 svn://localhost/users/test 表示向代码库中的目录 /users/test 中导入目录 E:\test 中的所有文件。如果该操作在其它客户机上操作,则要把 localhost 替换成服务器的 ip 地址。

     确定后,在弹出的对话框中输入自己的用户名和密码,如果验证成功,则最后会显示成功。如果出现 Authorization failed,则表示该用户对目录 svn://localhost/users/test 没有写入权限。我在使用 [jmr:/usrs/yang] 设置的时候,结果除了管理员 zcl 都无法向代码库中导入文件,并且无法从代码库中导出。关于这种设置方法,我想是在创建代码库的方式不同,以后再研究。

5)测度导出代码

     在客户端任何目录下运行右键->Checkout,在URL of repository中输入svn://localhost/test,这样我们就得到了一份工作拷贝,这里得到了整个 test 目录。修改得到的 test.txt 文件,然后然后右键->Commit...,这样就将修改后的文件传到了 SVN 服务器上。

     在 test.txt 上右键->TortoiseSVN->Show Log,这样我们就可以看到我们对这个文件所有的提交。在版本1上右键->Compare with working copy,我们可以比较工作拷贝的文件和版本1的区别。

     比较常见的错误是:1. 没有权限访问,则 Authorization failed,这就需要在 authz 文件中具体设置。2. 用户名配置文件中前面有空格,同样会出现 Authorization failed 错误。3. 设置组成员时权限一定要注意, * = 会屏蔽掉其它所有用户的访问权限。

6):从 SVN 服务器代码仓库中删除代码,使用命令

              >svn delete svn://ip/users/test

        #出现错误提示: svn:无法使用外部编辑器获得日志信息;考虑设置环境变量$SVN_EDITOR,或者使用--message(-m)或--file(-F)选项  
svn:没有设置SVN_EDITOR,VISUAL或EDITOR环境变量,运行时的设定中也没有“editor-cmd”选项
解决方法: 在 我的电脑 中新建环境变量 SVN_EDITOR,设为 notepad, 然后在命令行: svn delete svn://ip/users/tests 选择 c 继续,弹出一记事本,关闭后,执行成功。

         中间过程需要输入服务器电脑管理员及操作用户密码,所以必须在 authz 中设置一个管理员,并设置对所有目录都具有读写权限,否则无法完成删除操作,会出现 access denied 错误。如果出现 svn: URL 'zcl' does not exist 这种错误,则表示 /users/zcl 目录中还没有导入过代码。*******************

Windows 防火墙可能会阻止 SVN 服务器的运行,需要在本机打开3690端口。控制面板--网络--防火墙 然后例外,添加端口 名称svn,端口号:3690。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值