admin 管理员组

文章数量: 887021


2023年12月21日发(作者:00001111二进制转换十进制)

SVN服务器建立/使用手册

SVN服务器建立/服务器建立/使用手册使用手册

手册

周宇辉

周宇辉

2008-2008-07-07-041/26

SVN服务器建立/使用手册

目录

1. SVN介绍..........................................................3

1.1

版本控制........................................................3

1.1

3

1.2

相关概念........................................................5

2. SVN服务器的建立..................................................7

2.1基于SVN协议的服务端.............................................7

2.2基于HTTP协议的服务端............................................8

2.3

SVN密码管理....................................................9

2.4

SVN权限管理(实例).............................................10

2.5

服务器端监视...................................................12

3. 客户端的使用.....................................................14

3.1

3.1.1 工作目录...................................................3.1.2 与BeyondCompare集成.......................................3.1.3 提交修改...................................................3.2

3.2.1 安装.......................................................3.2.2 取得工程...................................................3.2.3 提交成果 (Commit)..........................................3.2.4 查看历史...................................................3.2.5 获取特定版本...............................................3.2.6上传新文件.................................................14

16

16

17

18

18

20

23

24

24

25

4. 注意事项.........................................................26

2/26

SVN服务器建立/使用手册

1. SVN介绍

介绍

1.1

版本控制

简单的讲,版本控制可以让你:

• 在开发过程中保存产品的中间结果

• 获取你之前所保存的任一中间结果

• 并对一个阶段的产品进行打包(Label, Tag)

• 对任两个中间结果进行比较

客户端

图1-1 版本控制

版本控制是管理信息修改的艺术,它一直是程序员最重要的工具,程序员经常会花时间做出小的修改,然后又在某一天取消了这些修改,想象一下一个开发者并行工作的团队 - 或许是同时工作在同一个文件!- 你就会明白为什么一个好的系统需要管理潜在的混乱。

1.1 SVN

SVN

SVN全名Subversion,即版本控制系统。

SVN是一个跨平台的软件,支持大多数常见的操作系统。作为一个开源的版本控制系统,Subversion管理随时间改变的数据。 这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。这样你就可以把文件恢复到旧的版本, 或是浏览文件的变动历史。Subversion是一个通用的系统, 可用来管理任何类型的文件, 其中包括了程序源码。

传统的版本控制工具采用 Lock – Modify – Unlock方式(如图1-2),例如VSS。

在这种方式下,一旦用户修改文件,该文件处于锁定状态,此时不允许其他用户修改。也即一个文件当前仅允许一个用户拥有写权限。

3/26

SVN服务器建立/使用手册

比较常见的Lock是采用文件只读非只读实现的。

图1-2 Lock-Modify-Unlock

SVN则采用Copy-Modify-Merge方式(如图1-3),这种方式的好处可以允许多个用户同时修改相同的文件。

一个用户在对已修改的文件进行上传时,如果此时服务器上的版本比该文件基于的版本要新,则会产生冲突,不允许该用户上传。

该用户必须获取服务器上的新版本,与本地的修改进行合并(Merge),然后进行上传。

图1-3 Copy-Modify-Merge

4/26

SVN服务器建立/使用手册

图1-4是SVN的架构图,从图中可以看出,SVN的客户端可以采用三种不同的资源库访问方式:http,svn,local。SVN的资源库类型有两种。

图1-4 SVN架构

1.2

相关概念

Tags

Tags

Tag是项目在某一时间的快照 (snapshot) 。对于SVN来讲,每一次资源库的修订都是一次快照。

Tag可以用来建立milestone。Tag仅仅是项目某一时刻的标记,与工作空间,分支等没有任何关系。

SVN中的tag允许自定义名称,这样就可以方便的根据tag名称获取项目某一时刻的版本。

Trunk /

Trunk / B /

Branch

ranch

Trunk是项目工作的主干道,也可以理解为项目开发的原始路线、主开发进程。如果没有特殊的需求,项目会一直在trunk中进行。

在某个时刻,可能需要创建工作文档的第二个拷贝,然后单独维护这个拷贝。这就有了branch的概念,一个与其他开发进程独立的开发进程。

以上如图1-5所示,在主干道上可以创建多个branch。

5/26

SVN服务器建立/使用手册

【注意】注意】

※ trunk以及branch只是两个概念,在SVN中并没有实实在在的两个东西,如果你愿意的话,trunk也可以是branch,branch也可以是trunk。两种从实质上讲并没有什么区别,可以认为是两个不同的工作空间。

※ 虽然只是概念,但是在开发的时候尤其注意不要弄混当前的工作空间,防止发生不必要的损失。推荐为项目创建trunk,branch两个目录。

图1-5 trunk、branch

如图1-6,创建一个branch。

图1-6 创建一个branch

创建Branch后,工作的revision的变化,如图1-7。

图1-7 版本号的变化

※ SVN对于tag以及branch的创建不是easy copy的方式,所以不用担心空间的损耗等。

※ SVN的版本号 (revision) 对于整个SVN来讲是递增的.

6/26

SVN服务器建立/使用手册

2. SVN服务器的建立服务器的建立

安装环境:Window XP professional

软件:服务端软件 /

Subversion有三种运行方式,一种是基于Apache Http Server,一种是Subversion Standalone Server,还有一种local方式。

下面分别介绍svn、http两种方式的安装方法。

协议的服务端

2.1基于svn协议的服务端

【1】安装Subversion后,使用命令 svnadmin create "D:MySVN" 创建svn资源库,资源库地址为D:MySVN

【2】打开 D:,去掉以下内容之前的注释符

[general]

anon-access = none

auth-access = write

password-db = passwd

realm = My First Repository

说明: anon-access = none 不允许匿名访问!

auth-access = write 允许提交修改

password-db = passwd 密码文件名字

如果[general]

anon-access = read → anon-access = none

【3】用记事本打开D:MySVNconfpasswd,添加用户名(user)和密码(passwd)

[users]

user=password

可以添加多个这样的用户名密码对。

【4】创建svn服务,并启动,这样svn就会开机自动启动

在控制台下,输入如下命令:

sc create svnservice binpath= ""D:program

" --service –r D:MySVN" displayname=

SVNService" depend= Tcpip

7/26

SVN服务器建立/使用手册

注意注意:注意:

a. 如果路径中包括空格,一定要用“”处理“"”号,

例如在c:program filessubversion中,则命令应该写为binpath= "c:program "

b. sc对选项的格式还有要求,所有的“=”前不能有空格,而后面必须有空格。例如depend= Tcpip不能写为depend = Tcpip或depend=Tcpip

【5】经过上述四步的操作,就可以使用svn://localhost访问SVN服务器。

2.2基于http协议的服务端

基于Apache Http Server的Subversion,有以下好处:

• 能使用WebDAV协议

• 能使用浏览器作为客户端工具浏览源码仓库。

• 可以很容易的支持SSPI(Windows域认证)和LDAP,这些都是Apache本身就支持的。

• 能得到比较完善的Apache安全认证系统,比如SSL加密连接。

目前SVN1.4.6(当前最新版)暂不支持Apache2.2以上版本,请使用Apache2.0版本进行配置。如果先安装Apache2.0,然后在安装Subversion1.4.6,则Subversion的安装会提示是否配置Apache服务器,选择允许配置。则以下Apache的配置步骤可以省略。

【1】安装Apache服务器

【2】检查Apache的modules目录是否包含mod_dav_以及mod_authz_,如果没有,从Subversion的bin目录中拷贝这两个文件到modules目录。如果先安装Apache,然后安装Subversion,则会自动拷贝这两个模块。

【3】在Apache的配置文件中LoadModule位置的最后添加如下两行:

LoadModule dav_svn_module modules/mod_dav_

LoadModule authz_svn_module modules/mod_authz_

并且去掉LoadModule dav_module modules/mod_之前的#号

8/26

SVN服务器建立/使用手册

【4】如果不执行第2步的拷贝,那么在第3步新添加的两个LoadModule中使用绝对路径

【5】在配置文件的最后添加以下参数:

DAV svn

SVNPath D:MySVN

AuthType Basic

AuthName "Subversion repositories"

AuthUserFile D:MySVNconfpasswd

AuthzSVNAccessFile D:MySVNconfauthz

Require valid-user

其中:

中的svn为浏览器中需要输入的访问地址

• SVNPath D:MySVN 指定svn仓库的物理位置

• AuthUserFile D:MySVNconfpasswd 指定svn仓库的密码文件

• AuthzSVNAccessFile D:MySVNconfauthz 指定svn仓库的权限设置文件

【6】重启Apache服务器,然后就可以使用localhost:8080/svn访问svn仓库。其中8080是Apace服务器设置的端口.

2.3 SVN密码管理

SVN使用svn协议以及http协议的密码处理是有所不同的,svn使用明文,http则可以可以使用md5加密,对应于conf/passwd文件,两者的形式也不同。

基于svn协议的passwd文件:

[users]

Larry = larry

在conf/passwd文件中增加用户名和密码对就可以。

基于http协议的passwd文件(缺少[users]头,用户名和密码的分隔为分号):

larry1:$$46q2xMws37UiwyL1w8MkN

* 可以通过手动编辑的方式增加用户名和密码(可以是明文)

9/26

SVN服务器建立/使用手册

* 使用Apache的htpasswd工具创建用户

创建第一个用户 htpasswd -cm d:Mysvnconfpasswd user1

回车后会要求输入密码

创建第二个用户 htpasswd -m d:Mysvnconfpasswd user1

2.4 SVN权限管理(实例)

厦门央瞬公司是一家电子元器件设备供应商,其中有个ARM部门,专门负责ARM芯片的方案设计、销售,并在北京、上海各设立了一个办事处。对于工作日志,原先采用邮件方式发给经理,但是这种方式有个缺点,那就是不具备连续性,要看以前的日志必须一封一封邮件去查看,很麻烦。

于是就想到利用Subversion, 让员工在自己电脑上编辑日志,然后利用svn传送回来,既方便员工自己编写日志,又方便对日志的归档处理,而且提交日志的时候只需要执行一下 svn commit 即可,比发送邮件还要简单的多。

部门文档的目录结构如下

部门文档的目录结构如下

test 部门名称

├─diary 工作日志目录

│ ├─headquarters 总部工作日志目录

│ ├─beijing 北京办日志目录

│ └─shanghai 上海办日志目录

├─ref 公司公共文件参考目录

└─temp 临时文件目录

人员情况

- morson,公司总经理,不习惯使用电脑,更喜欢传统的纸与笔,以及面对面的交流

- michael,arm事业部的部门经理,没事的时候喜欢弄点儿新技术,用svn来管理日志,就是他想出来的主意

- scofield,北京办人员,老员工,为人油滑难管

- lincon,上海办人员,老员工,大老实人一个

- linda,总部协调员、秘书,文笔不错,长得也不错

- rory,单片机技术员,技术支持

访问权限需求分析

访问权限需求分析

10/26

SVN服务器建立/使用手册

- 允许总经理、部门经理读取所有文件。顺便给他们开放写权限,以便体现对他们职位的尊重,虽然对于某些文件来说,他们若拥有“写”权限其实也没什么用处

- 除部门经理外,所有其他人员,均只能看到本办事处人员工作日志

- 不允许匿名访问

- ref目录只允许经理和秘书读写,对其他人只读

- temp目录人人都可以随意读写

在服务器端d:svndatatestconf配置

[general]

password-db =

anon-access = none

auth-access = write

authz-db =

在服务器端d:svndatatestconf配置进行用户创建

[users]

morson = ShowMeTheMoney

michael = mysecretpassword

scofield = hellolittilekiller

lincon = asyouknows111

rory = 8809117

linda = IlikeWorldCup2006

在服务器端d:svndatatestconf配置进行用户创建

注意:注意:在权限设置中,在权限设置中,用户名必须顶格,用户名必须顶格,不能留有空格!不能留有空格!

[groups]

g_vip = morson

g_manager = michael

g_beijing = scofield

g_shanghai = lincon

g_headquarters = rory, linda

g_docs = linda

[/]

@g_manager = rw

* = r

11/26

SVN服务器建立/使用手册

[/diary/headquarters]

@g_manager = rw

@g_headquarters = rw

@g_vip = r

* =

[/diary/beijing]

@g_manager = rw

@g_beijing = rw

@g_vip = r

* =

[/diary/shanghai]

@g_manager = rw

@g_shanghai = rw

@g_vip = r

* =

[/ref]

@g_manager = rw

@g_docs = rw

* = r

[/temp]

* = rw

这样SVN的配置权限设置完毕。

2.5

服务器端监视

Subversion是通过Hooks 来控制每次Transaction的行为,有Pre-Commit,

Post-Commit 等。一般情况下我们希望在提交代码后,Subversion可以自动发送邮件给组里的每个成员, 这种情况下可以通过post-commit这个脚本来完成。

该脚本存放在资源库(Repository)的Hooks目录下,以.tmpl后缀结尾,在Windows平台改成.bat,.cmd或.exe。(根据测试,bat,cmd不太好用)

12/26

SVN服务器建立/使用手册

图2-1 资源库脚本

当一个Transaction成功完成后,会调用,并传递如下两个参数,根据这两个参数调用svnlook (Subversion提供的工具) 可以获取相应的信息。

set REPOS=%1

set REPOS=%1

set REV=%2 set REV=%2

13/26

SVN服务器建立/使用手册

3. 客户端的使用

3.1 TortoiseSVN

客户端软件 TortoiseSVN,提供了使用图形界面以及和windows系统菜单的集成。/

图3-1 TortoiseSVN初始菜单

SVN Checkout :在本地建立工作目录,与数据仓库的文件建立关联

Repo-browser:浏览指定地址的数据仓库

Export:从数据仓库中导出数据

Create repository here:在本地创建一个数据仓库

Import:把当前目录的导入到数据仓库

14/26

SVN服务器建立/使用手册

图3-2 TortoiseSVN菜单

SVN Update:获取最新数据,不会覆盖本地已经修改的文件

SVN Commit:提交数据,如果点击右键的位置是文件或文件夹,则提交相应的内容,如果点击的是文件夹内部的空白处,是提交当前文件夹的内容

Show log:显示当前文件或文件夹的log信息

Check for modifications:检查当前文件或文件夹的修改信息

Revert:取消本次修改

Branch/tag:进行Branch或tag的设置

Add:向资源库添加文件

Relocate:重定向当前工作目录与数据仓库的关联

15/26

SVN服务器建立/使用手册

3.1.1 工作目录

图3-3 SVN工作目录图标

该文件的状态是正常的,但不一定和服务器上的最新版本相同

一般该文件被编辑,就会出现感叹号在更新时有冲突发生的时候出现的图标

该文件设置了svn:needs-lock,直到你获取锁之前,它都是read only的

该文件被锁定

文件或文件夹计划从资源库中删除;或版本控制下的文件在文件夹中缺失。

该文件被添加至数据仓库,但必须commit才可以生效。

3.1.2 与BeyondCompare集成

进入Settings的对话框,在外部程序下可以设置其与外部工具的集成。

16/26

SVN服务器建立/使用手册

图3-4 与BeyondCompare集成

3.1.3 提交修改

在做了修改之后,可以点击SVN Commit菜单对修改的文件或文件夹进行上传。

图3-5 SVN Commit菜单

点击SVN Commit 之后,就会弹出一个输入 log 的对话框:

17/26

SVN服务器建立/使用手册

图3-6 log窗口

输入log后,点击 OK,svn客户端就会向远程服务器提交修改:

图3-7 上传窗口

3.2 Subclipse

3.2.1 安装

使用subclipse作为svn的客户端

/servlets/ProjectDocumentList?folderID=2240&expandFolder=2240&folderID=0

把相应的features以及plugins文件放到Eclipse相应的目录下,然后执行文件,启动Eclipse即可。

文件:

18/26

SVN服务器建立/使用手册

-clean

打开Windows → Preferences,在Team节点中会出现SVN这个子结点。

图3-8 SVN配置窗口

打开Windows → Show View → Others,在SVN节点中,打开SVN资源库视图。

图3-9 SVN资源库窗口

点击可以添加SVN资源库(数据仓库),在URL中输入地址即可。或者点击右键出现如下图的“资源库位置”菜单。

19/26

SVN服务器建立/使用手册

图3-10 资源库位置菜单

图3-11 资源库URL

图3-12 资源库显示

3.2.2 取得工程

取得工程,开发的第一步。

在SVN资源库中选择工程,点击右键出现如下图的菜单。

其中“检出为”就是check out,可以理解为从服务器获取文件并与本地的某一工作目录关联起来。

20/26

SVN服务器建立/使用手册

图3-13 check out菜单

然后出现如下图的对话框,可以指定获取文件的特定版本。

图3-14 SVN检出窗口

21/26

SVN服务器建立/使用手册

图3-15 工作空间选择

点击Finish按钮,则会从服务器获取指定版本的文件,然后在指定的目录会出现如下的现象,这表示该文件夹已与服务器进行了关联。

图3-16 工作目录状况

在Eclipse的包浏览器中的节点中会出现相应的图标,对应于每个文件也会出现版本号,以及修改日期和相关者。

22/26

SVN服务器建立/使用手册

图3-17 Eclipse中工程显示

3.2.3 提交成果提交成果 (Commit)

只要某个文件进行了变动,该文件在树节点中的图标就会发生变化,提示你该文件有变动。

图3-18 变动的图标显示

在确认无误后,可以提交劳动成果。在提交之前,需要与服务器的最新版本进行比较确认修改点(一般情况如此)。

图3-19 比较菜单

基本修订版:与你文件所基于的版本进行比较

基本修订版资源库中的最新内容:与服务器上的最新版本进行比较

资源库中的最新内容修订版:与某历史版本进行比较

修订版Local History:与本地的文件进行比较

Local History

然后点击Team→Team→提交,来提交(Commit)你的工作成果。

提交图3-20 提交菜单

在弹出的对话框中添加注释添加注释,添加注释,然后确认需要提交的文件,点击OK进行提交。

23/26

SVN服务器建立/使用手册

图3-21 提交窗口

3.2.4 查看历史

点击Team→Team→显示资源历史记录查看文件或者文件夹的历史记录。

显示资源历史记录图3-22 历史记录菜单

图3-23 历史记录窗口

3.2.5 获取特定版本获取特定版本

打开要获取特定版本的文件的历史记录,然后在某一记录上点击右键可以看到许多功能菜单。

24/26

SVN服务器建立/使用手册

图3-24 功能菜单

• 获取内容:会覆盖当前的文件,此时如果提交文件,则会成功 获取内容• 获取修订版:也会覆盖当前文件,但此时提交,则会发生失败。

获取修订版

3.2.6上传新文件

点击Team→Team→添加至版本控制,把新文件添加到服务器。 添加至版本控制图3-25 添加菜单

此时,被添加的文件的图标就会变成:

图3-26 以添加版本控制图标显示

然后再执行提交动作提交动作就可以把文件上传到服务器。

提交动作25/26

SVN服务器建立/使用手册

4. 注意事项

• 首先取得服务器上的最新产品

• 确保所要提交产品的正确性(文档被确认过,代码通过编译,工作目录的正确等)

• 与服务器上的最新版本使用工具进行比较(例如BeyondCompare)

• 添加注释(最好用英文,当然给日本做外包用日文他们也比较欢迎)

• 如果不确定,最好实施Pair check in

• Subclipse提供了资源同步功能,在commit之前可以利用该功能确认本地工作目录与服务器的差别。

• 非服务器管理员不允许随意在服务器上建立或删除文件、文件夹。

• 一般推荐本地只保持一个工作目录。

※ 更多的关于SVN服务器以及客户端的使用可以通过网络搜索获取。

26/26


本文标签: 文件 服务器 工作 提交