centos 7安装配置svn

一,介绍SVN

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。 ----百度百科

二,安装SV

官网下载: http://subversion.apache.org/packages.html

SVN客户端TortoiseSVN :https://tortoisesvn.net/downloads.html

1,yum install subversion安装

1
[root@localhost conf]# yum install subversion
2,新建一个目录用于存储SVN目录

1
[root@localhost]mkdir /svn
3,新建一个测试仓库

1
2
3
4
5
6
7
8
9
[root@localhost svn]# svnadmin create /svn/test/
[root@localhost svn]# ll /svn/test/
total 24
drwxr-xr-x. 2 root root 4096 Jul 28 18:12 conf
drwxr-sr-x. 6 root root 4096 Jul 28 18:12 db
-r–r--r–. 1 root root 2 Jul 28 18:12 format
drwxr-xr-x. 2 root root 4096 Jul 28 18:12 hooks
drwxr-xr-x. 2 root root 4096 Jul 28 18:12 locks
-rw-r–r--. 1 root root 229 Jul 28 18:12 README.txt
以下关于目录的说明:

hooks目录:放置hook脚步文件的目录

locks目录:用来放置subversion的db锁文件和db_logs锁文件的目录,用来追踪存取文件库的客户端

format目录:是一个文本文件,里边只放了一个整数,表示当前文件库配置的版本号

conf目录:是这个仓库配置文件(仓库用户访问账户,权限)

4,配置SVN服务的配置文件svnserver.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[root@localhost conf]# vim svnserve.conf

This file controls the configuration of the svnserve daemon, if you

use it to allow access to this repository. (If you only allow

access through http: and/or file: URLs, then this file is

irrelevant.)

Visit http://subversion.tigris.org/ for more information.

[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 ##注意前边不要有空格,要顶齐
auth-access = write ##注意前边不要有空格,要顶齐

The password-db option controls the location of the password

database file. Unless you specify a path starting with a /,

the file’s location is relative to the directory containing

this configuration file.

If SASL is enabled (see below), this file will NOT be used.

Uncomment the line below to use the default password file.

password-db = passwd ##注意前边不要有空格,要顶齐

The authz-db option controls the location of the authorization

rules for path-based access control. Unless you specify a path

starting with a /, the file’s location is relative to the the

directory containing this file. If you don’t specify an

authz-db, no path-based access control is done.

Uncomment the line below to use the default authorization file.

authz-db = authz

This option specifies the authentication realm of the repository.

If two repositories have the same authentication realm, they should

have the same password database, and vice versa. The default realm

is repository’s uuid.

realm = This is My First Test Repository ##这个是提示信息
[sasl]

This option specifies whether you want to use the Cyrus SASL

library for authentication. Default is false.

This section will be ignored if svnserve is not built with Cyrus

SASL support; to check, run ‘svnserve --version’ and look for a line

reading ‘Cyrus SASL authentication is available.’

use-sasl = true

These options specify the desired strength of the security layer

that you want SASL to provide. 0 means no encryption, 1 means

integrity-checking only, values larger than 1 are correlated

to the effective key length for encryption (e.g. 128 means 128-bit

encryption). The values below are the defaults.

min-encryption = 0

max-encryption = 256

5,配置访问用户及密码

1
2
3
4
5
6
7
8
9
10
11
[root@localhost conf]# vim passwd

This file is an example password file for svnserve.

Its format is similar to that of svnserve.conf. As shown in the

example below it contains one section labelled [users].

The name and password for each user follow, one account per line.

[users]

harry = harryssecret

sally = sallyssecret

lqb = lqb123456
test1 = 123456
test2 = 654321

6,配置新用户的授权文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@localhost conf]# vim authz

This file is an example authorization file for svnserve.

Its format is identical to that of mod_authz_svn authorization

files.

As shown below each section defines authorizations for the path and

(optional) repository specified by the section name.

The authorizations follow. An authorization line can refer to:

- a single user,

- a group of users defined in a special [groups] section,

- an alias defined in a special [aliases] section,

- all authenticated users, using the ‘$authenticated’ token,

- only anonymous users, using the ‘$anonymous’ token,

- anyone, using the ‘*’ wildcard.

A match can be inverted by prefixing the rule with ‘~’. Rules can

grant read (‘r’) access, read-write (‘rw’) access, or no access

(’’).

[aliases]

joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]

harry_and_sally = harry,sally

harry_sally_and_joe = harry,sally,&joe

[/foo/bar]

harry = rw

&joe = r

* =

[repository:/baz/fuz]

@harry_and_sally = rw

* = r

admin = lqb,test2
user = test1
[/svn/test/]
@admin = rw
@user = r
备注:

admin = lqb,test2 创建admin组,组成员为:lqb,test2

user = test1 创建用户组,用户成员:test1

[test:/] 赋予根权限,为了便于管理和权限的控制,可以把权限细化到版本库中相应的目录

@admin = rw admin组有读写的权限

@user = r user组只有读的权限

*= 表示除了上面设置的权限用户组以外,其他所有用户都设置空权限,空权限表示禁止访问本目录,这很重要一定要加上。

备注:版本库的目录格式如下:

[<版本库>:/项目/目录]

@<用户组名> = 权限

<用户名> = 权限

其中[]內容有許多写法:

[/],表示根目录及其一下的路径,根目录是svnserver启动时指定好的,上述实例中我们指定为:/svn/svndata([/]=/svn/svndata).[/]就是表示对全部版本设置的权限

[test:/],表示对版本库test设置权限;

[test:/svnadmin],表示对版本库test中的svnadmin项目设置权限;

[test:/svnadmin/second],表示对版本库test中的svnadmin项目的目录设置权限;

权限的主体可以是用户组,用户或者*,用户组在前面要以@开头,*表示全部用户

权限分为:r ,w, rw和null ,null空表示没有任何权限。

auhtz配置文件中的每个参数,开头不能有空格,对于组要以@开头,用户不需要。

7,启动svn服务

1
[root@localhost conf]#svnserve -d -r /svn/
注意:更改svnserver.conf时需要重启SVN服务,更改authz,passwd文件时则不需要重启服务

二,通过客户端进行连接:

<一>,Windos客户端连接操作

1,使用windows的客户端来进行连接

2,在Linux使用如下命令行:

1
2
3
4
[root@localhost conf]# svn co svn://192.168.200.200/test
A test/工作文档.txt.bak
A test/soft
Checked out revision 2.
如果失败的话,基本上可以断定authz文件的配置有问题,可以修改下:

1
2
3
4
5
6
admin = lqb,test2
user = test1
[/]
@admin = rw
@user = r

  • = ###表示除了上面设置的权限用户组以外,其他所有用户都设置空权限,空权限表示禁止访问本目录

3,check out后会在桌面创建一个文件夹,说明操作成功,接下来向该文件夹放文件,然后右键SVN commit,会看到文件在同步,如图一,二,三,四,五

图一

图二

图三

图四

4,同步完成之后,我们可以在本地查看是否同步到服务器中,右击桌面—>TortoiseSVN→Repo Browser即可查看,也可以先SVN Update更新一下,确保内容是最新的。

5,如果要删除文件,直接本地删除然后commit即可。

如果查看历史版本TortoiseSVN,右击文件夹–>TortoiseSVN–>Show log.而且可以查看文档发生了什么变化。

如果版本库地址发生了变化更换的步骤如下:右击文件夹–>TortoiseSVN–>Relocate修改地址确认commit即可

<二>,Linux客户端同步过程:

把linux做为SVN客户端,所以你操作的并不一定是SVN的服务器那台,以后如果说我要定时自动发布代码等等,这时候就要用到脚本了,所以接下来的也是很重要的首先安装SVN,步骤同上,在此就不在赘述。

1,同步文件,check out: svn co svn://192.168.1.202/sadoc /data/svndata/ --username=我的用户名 --password=我的密码

1
2
3
4
5
6
7
8
9
10
[root@localhost conf]# svn co svn://192.168.200.200/test /svn --username=lqb --password=lqb123456
A /svn/svn.txt.bak
A /svn/工作文档.txt.bak.bak
A /svn/svn-test.txt
A /svn/svn.txt
A /svn/工作文档.txt.bak
A /svn/ROOT.war
A /svn/soft
A /svn/soft/ROOT.war
Checked out revision 16.
注意! 你的密码,对于认证域: svn://23.110.85.249:3690 68cfb7eb-c123-4643-8825-8a067020e3f4只能明文保存在磁盘上!

如果可能的话,请考虑配置你的系统,让 Subversion可以保存加密后的密码。请参阅文档以获得详细信息。

你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,来避免再次出现此警告。

2,版本库内容更新

1
2
3
4
5
6
[root@localhost conf]# svn update svn://192.168.200.200/test /svn --username=lqb --password=lqb123456
Skipped ‘svn://192.168.200.200/test’
At revision 16.
Summary of conflicts:
Skipped paths: 1
[root@localhost conf]#

3,查看svn中的数据

1
2
3
4
5
6
7
8
9
[root@localhost conf]# svn ls svn://192.168.200.200/test/ --username=lqb --password=lqb123456
ROOT.war
soft/
svn-test.txt
svn.txt
svn.txt.bak
工作文档.txt.bak
工作文档.txt.bak.bak
[root@localhost conf]#

4,本地数据commit数据到SVN中

1
2
3
4
5
6
7
8
9
[root@localhost svn]# vim 123.log
“123.log” [New] 3L, 32C written
[root@localhost svn]# svn add 123.log
A 123.log
[root@localhost svn]# svn ci -m “commit data”
Adding 123.log
Sending svn.txt
Transmitting file data …
Committed revision 17.
-m [–message] ARG: 指定日志信息ARG 不添加-m参数会报错。

<三>,SVN目录树

一般比较规范的SVN它会有三个目录,分别为:

/svn/trunk: 主干

/svn/branch: 个人或团队开发的分支

/svn/tag: 标记版本,比如某个版本开发好了。

现在我要创建三个这样的目录,然后我要导入到版本库中去,这里会用到的是import命令
import:将未纳入版本控制的文件或目录树提交到版本库。要分清楚它和commit的区别,commit指的是把工作副本的修改提交到版本库。

1
2
3
4
5
6
7
[root@localhost svndata]# mkdir -p svn/{trunk,branch,tag}
[root@localhost svndata]# svn import /svn/svn svn://192.168.200.200/test --username=lqb --password=lqb123456 -m “import”
Adding /svn/svn/trunk
Adding /svn/svn/tag
Adding /svn/svn/branch
Committed revision 18.
[root@localhost svndata]#
把主干的东西拷到一个分支

1
2
[root@localhost svndata]# svn copy svn://192.168.200.200/test/trunk svn://192.168.200.200/test/branch/branch -m “create a branch” --username=lqb --password=lqb123456
Committed revision 19.

https://www.cnblogs.com/weifeng1463/p/7593729.html

svn打开端口3690

阿里云服务器端口要打开
编辑防火墙,增加端口
vi /etc/sysconfig/iptables #编辑防火墙配置文件
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
:wq! #保存退出

3.重启配置,重启系统
systemctl restart iptables.service #重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动

4 . SVN服务
启动SVN服务。

$ sudo systemctl start svnserve.service
检查服务是否启动成功。

$ ps aux | grep svn
root 16349 0.0 0.1 162180 900 ? Ss 15:01 0:00 /usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /opt/svn
通过netstat可以看到SVN打开了3690端口。

$ sudo netstat -tnlp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 16349/svnserve
设置成开机启动。

$ sudo systemctl enable svnserve.service

https://blog.csdn.net/JingLisen/article/details/79361007

常见错误:
[root@centosjzg conf]# svn co svn://106.14.20.199/var/svn/newtest

svn: E210005: Unable to connect to a repository at URL ‘svn://106.14.20.199/var/svn/newtest’
svn: E210005: No repository found in ‘svn://106.14.20.199/var/svn/newtest’

看了网上教程 清空url历史数据 但是无效

其实还是svn://106.14.20.199/var/svn/newtest 链接错了

记得原来使用这个链接可以连接上 但是后来不知道为什么

后来把链接改了 使用 svn co svn://106.14.20.199/newtest

[root@centosjzg conf]# svn co svn://106.14.20.199/newtest

Checked out revision 0.

成功连接

仔细想了想 是因为 svn 默认数据根目录是 /var/svn

后来因为做了这一步

svnserve -dr /var/svn

[root@centosjzg conf]# ps aux|grep svnserve
root 5498 0.0 0.0 112660 976 pts/1 R+ 11:11 0:00 grep --color=auto svnserve
root 28472 0.0 0.0 162200 908 ? Ss Apr25 0:00 svnserve -d -r /var/svn

所以链接要从 svn://106.14.20.199/var/svn/newtest 改成 svn://106.14.20.199/newtest

使用了svnserve -dr /var/svn 命令 系统已经知道根目录是 /var/svn 所以链接中不需要重复添加/var/svn

而原来没有使用该命令系统默认为/根目录 所以要添加/var/svn

遇到svnserve.conf 配置文件的一些坑

还有这个问题

[root@centosjzg conf]# svn co svn://106.14.20.199/dd
svn: E220003: Unable to connect to a repository at URL ‘svn://106.14.20.199/dd’

svn: E220003: Invalid authz configuration

可以查看配置文件

[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz #测试

realm = dd #测试

#号注释的内容不要写在 = 后面 因为会把他当成 authz-db 文件 为 {authz #测试}文件 但是目录下根本没有这个文件 识别不了注释,所以注释应该写在下一行

[general]
anon-access = none
auth-access = write
password-db = passwd

authz-db = authz

#测试

realm = dd #测试

可以连接上 但是提示信息显示为 dd #测试

说明没有识别#注释

而且 配置文件开头不要有空格

[general]

anon-access = none

[general]
anon-access = none

问题2:
认证问题

在svnserve.conf:文件中去掉authz-db = authz前面的#号,会出现的认证失败。
造成此原因的主要问题就是authz文件中权限没有配置好。
例如:
创建prj1库
svnadmin create prj1

修改配置文件
svnserve.conf:
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz

passwd
[users]
tom = tom
authz:
[groups]
project_1 = tom

[prj1:/]
@project_1 = rw

访问
svn://192.168.1.105/prj1
则会出现认证失败

原因是:
svn://192.168.1.105/prj1 访问时找不到tom对应的库,就是因为[prj1:/]不是一个有效的库路径
把[prj1:/]改为[/]既可以了,[/]代表根目录下所有的资源,如果要限定资源,可以加上子目录即可。

发布了138 篇原创文章 · 获赞 83 · 访问量 88万+

猜你喜欢

转载自blog.csdn.net/kunga0814/article/details/103118188
今日推荐