注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

八哥吧室

那山沟里真的有山花吗

 
 
 

日志

 
 
 
 

Subversion使用  

2010-02-26 10:52:26|  分类: 软件园 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Subversion是版本控件的工具,官网:http://subversion.tigris.org/  下载安装文件,该文件包含了server和client端的所有功能。Subversion相关有很多工具,可以查看:http://www.duduwolf.com/post/subversion.asp , Subversion的使用可以用命令行的方式,也可以通过TortoiseSVN这个软件来将Subversin的命令行指定都集成成gui的形式,下面分这两种方式的使用来介绍:

1.命令行方式

安装完Subversion后就可以使用了,但是要在环境变量上指定一个SVN_EDITOR变量,指定为另一字符编辑器如notepad。下面内容主要转载自:http://hi.baidu.com/pplboy/blog/item/7b34674488fff988b3b7dca4.html

SVN的服务器端如见同样包含了客户端执行的一些命令,我们可以用这些命令来晚场我们日常的版本控制管理工作。

首先我们要在服务器端建立仓库(repository)。

在安装完毕SVN后,他会将安装目录中的bin目录加入到系统path中,可以通过右点我的电脑,选择高级->环境变量,查看path环境变量的值。

因此打开命令行窗口(win+r,键入cmd),输入svn命令,系统会返回『使用“svn help”得到用法。』说明系统已经认出svn命令了。

现在我们需要创建一个仓库(repository),假设仓库创建的位置为:E:\svn\repository目录下,那么我们需要在硬盘上创建该目录。创建完后,在命令行输入:svnadmin create E:\svn\repository

在执行完命令后,SVN没有给出任何信息,这说明我们的版本库已经创建成功了,我们这时再到E:\svn\repository下去看看,可以看到SVN已经再该目录下生成了很多文件夹和文件,这些文件就是SVN进行版本管理时所需要的,我们再日常的开发中是不会直接接触到这些文件的。

现在服务器端的仓库已经创建成功了,接下来就是在客户端创建一个项目,然后将该项目import到服务器端,将其纳入SVN的管理之下。不过在创建项目之前我们首先需要启动服务器,服务器启动后才会进行网络侦听,检查到客户端的相关命令请求。

在命令行中输入如下命令:svnserve -d -r E:\svn\repository,该命令含义让SVN将此目录作为仓库,并侦听客户端的请求。其中-d的作用为后台模式,而-r的作用是为制定服务器的仓库路径。

当服务器启动后,请不要关闭命令行窗口,否则会吧svnserve的服务停下来的,接下来的操作我们可以另外打开一个命令行窗口进行。

假设我们的客户端创建的项目在E:\test\client,我们在该目录下创建一个文件夹child和一个文件test.txt,并在该文件中增加些文本。

我们首先将命令行的当前目录转到E:\test目录下,在命令行中输入如下命令:svn import svn://localhost,其中svn://localhost表示的是SVN服务器的ip地址,这里就表示是我们本机地址。另外SVN实现了自己独有的协议SVN协议,所以我们可以看到url形式是svn://这样的,这个命令的作用就是当前目录以及其所有子目录和文件imort到服务器上去,纳入SVN的管辖范围中。

执行完毕后我们发现该命令失败了

E:\test> svn import://localhost

svn:无法使用外部编辑器获得日志信息;考虑设置环境变量$SVN_EDITOR,或者使用--message(-m)或--file(-F)选项

svn:没有设置SVN_EDITOR,VISUAL或EDITOR环境变量,运行时的设定中也没有“editor-cmd”选项

E:\test>

通过命令行的说明我们看到,该命令要求我们指定好一个记录日志的文件或者在系统环境变量中增加一个SVN_EDITOR的变量。二者选一就可以了,那么我们可以增加一个SVN_EDITOR的环境变量。该变量的值我们就取为系统自带的记事本就可以了。方法同前面说的path环境变量一样。在系统的环境变量中新建SVN_EDITOR,将它的值设为notepad即可

SVN_EDITOR=notepad

注意,设置完环境变量后,要关闭原来的命令窗口,重新cmd开一个命令行窗口,从而使得刚设的环境变量生效。

同样的cd到E:\test,以此为当前目录,然后输入命令:svn import svn://localhost

当我们输入命令回车后,出现一个记事本的信息窗口,这证明了我们的环境变量的增加是正确的,关闭该记事本窗口。命令行如下:

E:\test> svn import svn://localhost

日志信息未修改,或未指定

a)终止,c)继续,e)编辑

我们选择c,继续

E:\test> svn import svn://localhost

日志信息未修改,或未指定

a)终止,c)继续,e)编辑

c

svn:认证失败

E:\test>

出现认证失败的信息,说明我们已经连接到SVN的服务器,不过服务器认为我们的客户端没有相应的权限,所以这时我们改变一下SVN的认证权限。

回到SVN仓库,即E:\svn\repository目录,我们发现这里面有一个conf目录,进入该文件夹,用文本编辑器打开svnserve.conf文件

我们看到这里是关于访问SVN仓库的一些认证设定,找到第12行:anon-access=read,这表示匿名用户的访问权限是读,并且大家注意到,该行的前面有个“#”。这表示改行是被注释掉的,这与Java的properties文件的注释方式是一致的,这也就说明了此时SVN服务器是不允许匿名登陆的,那么我们现在可以去掉“#”,不过现在客户端也只是匿名读,我们的import操作是写操作,所以我们在该行下面增加一行anon-access=write,如下面所示:

........

[general]

###These options control access to the repository for unauthenticated

###and authenticated users. Valid values are "write","read",

###and "none". The sample settings below are the defaults.

anon-access = read

anon-access = write

# auth-access = write

........

当然如果需要进行有权限的设置,可以将auth-access进行指定,并在同目录下的password文件中指定用户名和密码。在修改时注意在去掉前面的#的同时也要把空格去掉,不然会出现svnserve.conf:12: Option expected
的错误,因为subversion读取配置文件svnserve.conf时,无法识别有前置空格的配置文件。

保存,关闭该文件。

这时我们需要停止当前的svnserve的服务,然后重新启动,让它接受我们的改变,转到它的命令窗口,用ctrl+c停止它,再重新启动。

svnserve -d -r E:\svn\repository

现在回到之前的命令行窗口,重新执行import命令,操作步骤如前面一样,过程如下

E:\test> svn import svn://localhost

日志信息未修改,或未指定

a)终止,c)继续,e)编辑

c

增加       client

增加       。。。。

提交后的版本未1。如果使用权限的方式import则需要在svnserve.conf设定auth-access = write,命令行使用:svn import svn://localhost --username id --password key

如果要在test目录下面下载工程,可以使用命令:svn checkout svn://localhost。如果使用权限方式checkout则需要在svnserve.conf设定auth-access = read。

 

2.TortoiseSVN的GUI方式

TortoiseSVN是很不错的SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端,用起来很方便,commit动作变得就像Winrar右键压缩一样方便。官网是:http://tortoisesvn.tigris.org/

建立版本库,对应于命令行的svnadmin create .\repo用Tortoise则是在右键->TortoiseSVN->Create Repository here...

对用户和权限的配置仍然同命令行方式一样要在刚建立的版本库目录中的conf\svnserve.conf进行修改,password是密码文件,authz文件是每个用户的访问权限。

由于TortoiseSVN是SVN客户端的程序,所以运行服务器端的话还是需要命令行svnserve -d -r .\repo来执行的。如果觉得这样很麻烦,可以将Subersion的服务器端程序作为一个win服务,让其开机自动运行,运行是:

sc create svnserve binpath= "C:\developertools\Subversion\bin\svnserve.exe --service --root D:\svn\sise_repository" displayname= "Subversion" depend= Tcpip start= auto

另外还有两点需要小心处理。首先,如果路径中包括空格,一定要用“\”处理“"”号,例如上面的例子中如果svnserve.exe在“c:\program files\subversion\”中,则命令应该写为“binpath= "\"c:\program files\subversion\bin\svnserve.exe\"”(“”中的内容),整个命令如下:

sc create svnservice
binpath= "\" C:\developertools\Subversion\bin\svnserve.exe \" --service -r D:\svnroot"
displayname= "Subversion" depend= Tcpip start= auto

其次,sc对选项的格式还有要求,例如“depend= Tcpip”不能写为“depend = Tcpip”或“depend=Tcpip”,也就是“=”前不能有空各,而后面必须有空格。

如果要卸载win服务,则:

sc delete svnservice

至于其他的Import和Checkout在右键中都可以找到。

3.在Eclipse中使用Subversion

可以参见http://blog.csdn.net/lenolong/archive/2009/01/01/3680289.aspx ,但是好像最新的Eclipse都已经默认集成了SVN插件。

 

4.一些碰到的问题

配置svn+apache服务器时,在导入或提交时,如果是unix、linux、mac os x等系统可能遇到类似这样的权限问题:

svn: Can't open file './repos/db/txn-current-lock': Permission denied

这个主要原因:在svnadmin create时是root身份,所以,mod_dav_svn就没有write权限等。

解决办法:

sudo chown -R daemon ./repos # 将./repos目录的拥有者设为daemon。daemon是SVN repository的用户组名,可能为其他的值。本实验室是svn
        sudo chmod -R 755 ./repos # 将./repos目录的读写权设为755

  评论这张
 
阅读(505)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017