SVNSubversion详解.docx

上传人:b****7 文档编号:11096067 上传时间:2023-02-25 格式:DOCX 页数:22 大小:187.56KB
下载 相关 举报
SVNSubversion详解.docx_第1页
第1页 / 共22页
SVNSubversion详解.docx_第2页
第2页 / 共22页
SVNSubversion详解.docx_第3页
第3页 / 共22页
SVNSubversion详解.docx_第4页
第4页 / 共22页
SVNSubversion详解.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

SVNSubversion详解.docx

《SVNSubversion详解.docx》由会员分享,可在线阅读,更多相关《SVNSubversion详解.docx(22页珍藏版)》请在冰豆网上搜索。

SVNSubversion详解.docx

SVNSubversion详解

 

1SVN服务器配置

下载SubVersion,有安装版和解压缩版

设置svn_home\bin为path

创建资源库,假设资源库为F:

\SVNRepositoryRoot\repository,,则要分两步创建,

先mkdird:

\svnroot\,这个可以使用操作系统命令创建

然后用svn命令,svnadmincreateF:

\SVNRepositoryRoot\repository

配置svn_home\conf\svnserve.conf,

启用anon-access=read,

并添加anon-access=write,

修改配置文件特别要注意:

默认没有anon-access=write,默认时anon-access=read下面是#auth-access=write

去掉注释符#后,要使得anon-access顶格,即要去掉前面的空格,否则可能报需要option的错误。

当出现'目标机器积极拒绝,无法连接'或svn:

Can'tconnecttohost...时,请依次检查下面各项

1,服务器有没有运行,有没有打开相应端口

如果服务器是svnserve,检查有没有运行svnserve,有没有打开3690端口

如果服务器是apache,检查apahce是否运行,是否打开80端口

检查时可以在服务器运行netstat-na看看相应端口是否在LISTEN

2,防火墙有没有开放相应端口

3,客户端是否可以连接服务器的相应端口

使用命令telnet服务器IP相应端口

如:

telnet192.168.0.13690有效,可测试端口是否打开

启动服务,导入导出都是在服务启动后才能使用的。

启动服务两种方式:

命令窗口,启动后则不能关闭该命令窗口,与Tomcat一样

svnserve-d-rF:

\SVNRepositoryRoot\repository

设置成Windows服务形式,这中非常好,可以设置随操作系统启动

sccreatesvnservebinPath="E:

\ProgramFiles\svn\bin\svnserve.exe--service--root

F:

\SVNRepositoryRoot\repository"displayname="Subversion"depend=tcpipstart=auto

导入项目,先在svn资源库中创建对应得虚拟目录,然后导入

F:

\test>svnmkdir-FF:

\SVNRepositoryRoot\log.txtsvn:

//localhost/test

F:

\test>svnimport-fF:

\SVNRepositoryRoot\log.txtsvn:

//localhost/test

导入时需给出一个记录日志的文件,如上即可,否则正确不能执行该命令。

接下来的操作可以用Tortoise或Eclipse插件轻松实现

2权限管理

2.1概念解释

比如有两个仓库aa和bb,管理员有两个admin和administrator

用户访问控制文件内容如下:

[groups]

admin=admin,administrator//组admin有两个成员admin和administrator

[/]

*=r//每个用户都有读权限

[aa:

/]//在仓库aa根目录下

admin=r//管理员admin有读权限

administrator=rw//管理员administrator有读写权限

[bb:

/]//在仓库bb根目录下

admin=r//管理员admin有读权限

administrator=rw//管理员administrator有读写权限

[bb:

/db]//在仓库bb的db文件目录下

@admin=rw//管理员组admin有读写权限

 

2.2详细步骤

用SVN(Subversion)取代CVS的呼声越来越高。

SVN也确实比CVS优胜很多,没有辜负众望。

在日常工作中,如何配置好和利用好SVN,是很值得花些时间去研究研究的。

在我应用SVN的这段时间里,更喜欢的是用svnserve加客户端来搭配使用。

也就是将svnserve配置成为一个服务端,然后在Windows下安装个TortoiseSVN。

这是一个不错的搭配选择。

1SVN安装

1.1FreeBSD下安装SVN

1.1.1安装SVN

#cd/usr/ports/devel/subversion

#makeNOPORTDOCS=YES-DWITH_SVNSERVE_WRAPPERinstallclean

1.1.2创建用户

#pwuseradd-s/bin/sh-d/var/empty-nsvn

1.2Linux下安装SVN

1.2.1下载及编译安装SVN

#wgethttp:

//subversion.tigris.org/downloads/subversion-1.3.2.tar.bz2

#tar-jxvfsubversion-1.3.2.tar.bz2

#cdsubversion-1.3.2

#./configure--with-zlib--enable-all-static

1.2.2创建用户

#useradd-d/var/emptysvn

2svnserve配置

2.1创建仓库

2.1.1创建仓库存放目录

#mkdir-p/opt/svn/{repos,etc}

2.1.2创建SVN仓库

#svnadmincreate/opt/svn/repos/source1

#svnadmincreate/opt/svn/repos/source2

#chown-Rsvn:

svn/opt/svn/

仓库名称可以根据自己的规划或喜好设定。

2.2配置仓库

SVN的svnserve对于每个仓库,有一个独立的配置文件和独立的用户、权限管理。

在这里仍然要保持配置文件svnserve.conf的独立,但是用户、权限管理是用统一的一个文件来存储。

这样方便以后的管理和维护。

另外要注意,即使svnserve服务已经运行,修改配置文件或者用户、权限管理文件,保存后马上生效,不需要重启服务。

2.2.1配置source1仓库

进入仓库目录

#cd/opt/svn/repos/source1

2.2.2修改配置

你可以直接删除默认的svnserve.conf文件,然后使用下面的配置:

#visvnserve.conf

[general]

anon-access=none

auth-access=write

password-db=/opt/svn/etc/svn-user.conf

authz-db=/opt/svn/etc/svn-authz.conf

realm=MyFirstRepository

说明:

anon-access=none#不允许匿名用户访问

auth-access=write#通过验证的用户可以读和写

password-db=/opt/svn/etc/svn-user.conf#用户保存文件

authz-db=/opt/svn/etc/svn-authz.conf#权限管理文件

realm=MyFirstRepository#仓库名称

2.2.3配置source2仓库

#cd/opt/svn/repos/source2

2.2.4修改配置

你可以直接删除默认的svnserve.conf文件,然后使用下面的配置:

#visvnserve.conf

[general]

anon-access=none

auth-access=write

password-db=/opt/svn/etc/svn-user.conf

authz-db=/opt/svn/etc/svn-authz.conf

realm=MySecondRepository

如果有更多的仓库,可以类推配置。

----------------------------------------------------------------------

svnserve.conf的原始内容:

###Thisfilecontrolstheconfigurationofthesvnservedaemon,ifyou

###useittoallowaccesstothisrepository.(Ifyouonlyallow

###accessthroughhttp:

and/orfile:

URLs,thenthisfileis

###irrelevant.)

###Visithttp:

//subversion.tigris.org/formoreinformation.

[general]

###Theseoptionscontrolaccesstotherepositoryforunauthenticated

###andauthenticatedusers.Validvaluesare"write","read",

###and"none".Thesamplesettingsbelowarethedefaults.

#anon-access=read

#auth-access=write

###Thepassword-dboptioncontrolsthelocationofthepassword

###databasefile.Unlessyouspecifyapathstartingwitha/,

###thefile'slocationisrelativetotheconfdirectory.

###Uncommentthelinebelowtousethedefaultpasswordfile.

#password-db=passwd

###Theauthz-dboptioncontrolsthelocationoftheauthorization

###rulesforpath-basedaccesscontrol.Unlessyouspecifyapath

###startingwitha/,thefile'slocationisrelativetotheconf

###directory.Ifyoudon'tspecifyanauthz-db,nopath-basedaccess

###controlisdone.

###Uncommentthelinebelowtousethedefaultauthorizationfile.

#authz-db=authz

###Thisoptionspecifiestheauthenticationrealmoftherepository.

###Iftworepositorieshavethesameauthenticationrealm,theyshould

###havethesamepassworddatabase,andviceversa.Thedefaultrealm

###isrepository'suuid.

#realm=MyFirstRepository

----------------------------------------------------------------------

3用户及权限管理

3.1用户管理3.1.1创建用户存储文件

#vi/opt/svn/etc/svn-user.conf

3.1.2设置用户帐号

[users]

harry=harryssecret

sally=sallyssecret

bote=botessecret

说明:

[users]#是必须的,标记为用户配置开始

harry=harryssecret#harry是用户名,harryssecret是密码。

注意,是明文密码

sally=sallyssecret#同上

bote=botessecret#同上

往后所以仓库的用户都在这里记录就可以了。

至于那个用户,允许访问那个仓库,在权限管理里限制。

3.2权限管理3.2.1创建权限管理文件

#vi/opt/svn/etc/svn-authz.conf

3.2.1设置权限管理

[groups]

source1=harry

source2=sally

[source1:

/]

@source1=rw

@source2=r

[source2:

/]

@source2=rw

bote=rw

 

2.3成功案例

资源库为:

svnadmincreateF:

\SVNRepositoryRoot\repository

Svnserver.conf

anon-access=none

auth-access=write

password-db=/opt/svn/etc/svn-user.conf

authz-db=/opt/svn/etc/svn-authz.conf

realm=MySecondRepository

 

Authz

[groups]

#harry_and_sally=harry,sally

#harry_sally_and_joe=harry,sally,&joe

qingdaowebsite=darren,lp,qrq

[/]

@qingdaowebsite=rw

*=r

[repository:

/QingDaoWebSite]

@qingdaowebsite=rw

*=r

Passwd

[users]

darren=darren

lp=lp

qrq=qrq

3SVN版本冲突解决详解

3.1版本冲突原因:

假设A、B两个用户都在版本号为100的时候,更新了kingtuns.txt这个文件,A用户在修改完成之后提交kingtuns.txt到服务器,这个时候提交成功,这个时候kingtuns.txt文件的版本号已经变成101了。

同时B用户在版本号为100的kingtuns.txt文件上作修改,修改完成之后提交到服务器时,由于不是在当前最新的101版本上作的修改,所以导致提交失败。

 

3.2版本冲突现象:

冲突发生时,subversion会在当前工作目录中保存所有的目标文件版本[上次更新版本、当前获取的版本(即别人提交的版本)、自己更新的版本、目标文件]。

假设文件名是kingtuns.txt

对应的文件名分别是:

kingtuns.txt.r101

kingtuns.txt.r102

kingtuns.txt.mine

kingtuns.txt。

同时在目标文件中标记来自不同用户的更改。

 

3.3版本冲突解决:

3.3.1场景:

1、现在A、B两个用户都更新kingtuns.txt文件到本地。

 

2、文档中原始文件内容如下:

 

 

3、A用户修改文件,添加内容“A用户修改内容”完成后提交到服务器

 

 

 

4、B用户修改文件,添加内容“B用户修改内容”完成后提交到服务器

 

B用户提交更新至服务器时提示如下:

 

B用户将文件提交至服务器时,提示版本过期:

首先应该从版本库更新版本,然后去解决冲突,冲突解决后要执行svnresolved(解决),然后在签入到版本库。

在冲突解决之后,需要使用svnresolved(解决)来告诉subversion冲突解决,这样才能提交更新。

 

3.3.2解决冲突有三种选择:

 

A、放弃自己的更新,使用svnrevert(回滚),然后提交。

在这种方式下不需要使用svnresolved(解决)

 

B、放弃自己的更新,使用别人的更新。

使用最新获取的版本覆盖目标文件,执行resolvedfilename并提交(选择文件—右键—解决)。

 

C、手动解决:

冲突发生时,通过和其他用户沟通之后,手动更新目标文件。

然后执行resolvedfilename来解除冲突,最后提交。

 

3.3.3解决步骤如下:

1、 在当前目录下执行“update”(更新)操作

 

 

2、 在冲突的文件上(选中文件--右键菜单—TortoiseSVN—Editconflicts(解决冲突)),出现如下窗口

 

Theirs窗口为服务器上当前最新版本

Mine窗口为本地修改后的版本

Merged窗口为合并后的文件内容显示

    

3、 如果要使用服务器版本,在Theirs窗口选中差异内容,右键,选择Usethistextblock(使用这段文本块)。

同理如果要使用本地版本,在协商后,在Mine窗口右键,选择Usethistextblock(使用这段文本块)。

 

   

4、 修改完成后,保存kingtuns.txt文件内容。

 

5、 在B用户的冲突目录下,选中文件--右键菜单—TortoiseSVN—Resolved(解决)。

会列出冲突的文件列表,如果确认已经解决,点OK。

 

6、 冲突解决

 

     

7、提交解决冲突后的文件。

 

 

 

 

3.4如何降低冲突解决的复杂度:

1、当文档编辑完成后,尽快提交,频繁的提交/更新可以降低在冲突发生的概率,以及发生时解决冲突的复杂度。

2、在提交时,写上明确的message,方便以后查找用户更新的原因,毕竟随着时间的推移,对当初更新的原因有可能会遗忘

3、养成良好的使用习惯,使用SVN时每次都是先提交,后更新。

每天早上打开后,首先要从版本库获取最新版本。

每天下班前必须将已经编辑过的文档都提交到版本库。

4Subversion中如何checkout出单个文件

4.1通过命令行操作

1、检出目录images

svnco--depth=empty

images_work_dir

这样就在本地形成了一个工作拷贝目录images_work_dir

2、进入images_work_dir目录,单独更新logo.jpg

svnuplogo.jpg

这样,我们就单独检出了logo.jpg,后面就可以对这个文件进行修改、提交等操作。

4.2通过TortoiseSVN操作

目前还不清楚TortoiseSVN该如何操作,希望知道的朋友补充

根据楼主上面的提示,我使用TortiseSVN客户端试验了一下,能正常检出,我做如下补充(还以楼主举的例子为例)。

1、使用TortiseSVN客户端(以1.5.3版为例)右键菜单中的“svncheckout”检出logo.jpg文件的上级目录images文件夹,在检出窗口中的“检出深度”处要选择“仅此项”,这样检出来才是一个空目录,本地命名为temp。

2、然后在temp文件夹上点右键,在弹出的TortiseSVN右键菜单中选择“检查更新”,在“检查更新”窗口中点击“检查版本库”,会列出该“images”目录下的所有文件。

3、在“检查更新”窗口中选中要检出的“logo.jpg”文件,点右键,在右键菜单中选择“更新”,即可将该文件单独检出。

5SVN插件安装

我刚刚安装好,我写在我的博客中

安装subclipse,SVN插件

1、从官网下载site-1.6.9.zip文件,网址是:

subclipse.tigris.org,官网可以下载,找到地方就行,之前找错了

2、从中解压出features与plugins文件夹,复制到E:

\MyEclipse\myPlugin\svn里面,其它的*.xml文件不要。

3、在E:

\MyEclipse\MyEclipse8.5\dropins下新建文件svn.link,内容是:

path=E:

\\MyEclipse\\myPlugin\\svn保存。

4、删除E:

\MyEclipse\MyEclipse8.5\configuration\org.eclipse.update文件夹

5、重启myeclipse就一切正常了。

 

6SVN迁移,备份,重装系统后恢复数据

svn服务要迁移到其它linux主机上

原服务器svn配置

仓库路径:

/home/svn/repos

权限文件:

/home/svn/svn-access-file

用户认证文件:

/home/svn/passwordfile

apache配置文件:

/etc/httpd/conf.d/subversion.conf

svn服务启动脚本/etc/init.d/svn

做法如下

一、在原服务器上备份svn,备份内容如下

1.备份/home/svn/svn-access-file文件

2.备份/home/svn/passwordfile文件

3.备份/etc/httpd/conf.d/subversion.conf文件

4.备份/etc/init.d/svn文件

5.将版本库导出为一个文件,使用如下命令

viewplaincopytoclipboardprint?

01.svnadmindump/home/svn/repos>svn_bak

svnadmindump/home/svn/repos>svn_bak

将以上备份的文件传到linux新主机的某个目录下,如/root/

二、在新的linux环境上安装svn和apache,配置

1.安装svn,使用如下命令

viewplaincopytoclipboardprint?

01.yuminstallsubversion

02.yuminstallhttpd

03.yuminstallmod_dav_svn

yuminstallsubversion

yuminstallhttpd

yuminstallmod_dav_svn

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1