Centos7搭建SVN及配置

一、SVN简介

1.1、简介

Subversion(SVN) 是一个开源的版本控制系統, Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。

1.2、相关概念

  • repository(源代码库):源代码统一存放的地方

  • Checkout(提取):当你手上没有源代码的时候,你需要从repository checkout一份

  • Commit(提交):当你已经修改了代码,你就需要Commit到repository

  • Update (更新):当你已经Checkout了一份源代码, Update一下你就可以和Repository上的源代码同步,你手上的代码就会有最新的变更

二、SVN安装及配置

参考文档:https://blog.csdn.net/qq_33722172/article/details/84144400

1)yum 安装svn

[root@svn ~]# yum -y install subversion
#查看版本
[root@svn ~]# svnserve --version
svnserve, version 1.7.14 (r1542130)
   compiled Apr 11 2018, 02:40:28

Copyright (C) 2013 The Apache Software Foundation.
This software consists of contributions made by many people; see the NOTICE
file for more information.
Subversion is open source software, see http://subversion.apache.org/

The following repository back-end (FS) modules are available:

* fs_base : Module for working with a Berkeley DB repository.
* fs_fs : Module for working with a plain file (FSFS) repository.

Cyrus SASL authentication is available.

2)创建版本库目录及版本库

[root@svn ~]# mkdir -p /var/svn/svnrepos/
[root@svn ~]# svnadmin create /var/svn/svnrepos/svn-test  #创建版本库
[root@svn ~]# cd /var/svn/svnrepos/svn-test
[root@svn svn-test]# ll
total 8
drwxr-xr-x 2 root root  54 Nov  6 20:50 conf
drwxr-sr-x 6 root root 233 Nov  6 20:50 db
-r--r--r-- 1 root root   2 Nov  6 20:50 format
drwxr-xr-x 2 root root 231 Nov  6 20:50 hooks
drwxr-xr-x 2 root root  41 Nov  6 20:50 locks
-rw-r--r-- 1 root root 229 Nov  6 20:50 README.txt
[root@svn svn-test]# cd conf/
[root@svn conf]# ll
total 12
-rw-r--r-- 1 root root 1080 Nov  6 20:50 authz          #负责账号权限的管理,控制账号是否读写权限
-rw-r--r-- 1 root root  309 Nov  6 20:50 passwd         #负责账号和密码的用户名单管理
-rw-r--r-- 1 root root 3090 Nov  6 20:50 svnserve.conf  #svn服务器配置文件

3)编辑svnserve.conf

[root@svn conf]# vim svnserve.conf
anon-access = none    #匿名访问的权限,可以是read,write,none,默认为read
auth-access = write   #使授权用户有写权限
password-db = passwd  #密码数据库的路径
authz-db = authz      #访问控制文件

4)编辑authz文件

[root@svn conf]# vim authz
....
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
admin = lawrence   #添加组

# [/foo/bar]
# harry = rw
# &joe = r
# * =

# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[svn-test:/]  #版本库
@admin = rw   #读写权限

image

5)编辑passwd文件

[root@svn conf]# vim passwd
[users]
# harry = harryssecret
# sally = sallyssecret
lawrence = 123456

6)启动,查看端口进程

[root@svn conf]# svnserve -d -r /var/svn/svnrepos
[root@svn conf]# ps -ef|grep svn
root      61898      1  0 21:06 ?        00:00:00 svnserve -d -r /var/svn/svnrepos
root      61900  61105  0 21:06 pts/1    00:00:00 grep --color=auto svn
[root@svn conf]# netstat -lntp|grep svn
tcp        0      0 0.0.0.0:3690            0.0.0.0:*               LISTEN      61898/svnserve

7)使用TortoiseSVN客户端访问

image

image

image

在linux上登录时这样子的:

image

三、SVN相关命令

3.1、svn  checkout  path

svn checkout svn://10.0.0.201/svn-test
svn co svn://10.0.0.201/svn-test  #简写

3.2、svn  checkout  path  subv

把你的工作拷贝放到subv而不是和前面那样放到trunk

3.3、svn  add  file

file是某个文件或者某个目录,如果添加所有的文件则用点“.”表示。

svn add file
例如:svn add test.php
svn  add  *.php(添加当前目录下所有的php文件)
svn add . (表示添加所有文件)
------------------------------------------------------------

[root@svn ~]# cd svn-test/
[root@svn svn-test]# echo aaa > test.txt
[root@svn svn-test]# svn add test.txt 
A         test.txt
[root@svn svn-test]# echo bbb > b.txt
[root@svn svn-test]# svn add .
svn: warning: W150002: '/root/svn-test' is already under version control
svn: E200009: Could not add all targets because some targets are already versioned
svn: E200009: Illegal target for the requested operation
[root@svn svn-test]# svn status  #查看状态
?       b.txt
A       test.txt
[root@svn svn-test]# svn add b.txt 
A         b.txt
[root@svn svn-test]# svn status
A       b.txt
A       test.txt

3.4、svn  lock

#加锁/解锁命令。
svn lock -m "LockMessage" [--force] path
例如:svn lock -m “lock test file”  test.php
svn unlock path

3.5、svn  update

#更新版本命令。
svn update -r m path

例如:
svn update 后面没有目录,默认更新当前目录及子目录的所有文件到最新版本。
 svn update -r 200 test.php (将版本库中的文件test.php还原到版本200)
简写:svn up

update命令还可以进行文件恢复。
(1)不小心写错了很多东西,想撤销所写的东西(已经把修改提交到服务器)
svn update -r 版本号
(2)不小心删错了文件,想把文件恢复回来(已经把删除提交到服务器)
svn update -r 版本号

3.6、svn  status

svn status -v path
svn status path
简写:svn st
------------------------------
[root@svn svn-test]# svn status 
?       c.txt
[root@svn svn-test]# svn status -v ./*
                 1        1 lawrence     b.txt
?                                        c.txt
                 1        1 lawrence     test.txt
--------------------------------------
显示文件和子目录的状态。
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。

文件状态描述:
A 被添加到本地代码仓库
''没有修改
C 冲突
D 被删除
I 被忽略
M 被修改
R 被替换
X 外部定义创建的版本目录
? 文件没有被添加到本地版本库内
!文件丢失或者不完整(不是通过svn命令删除的文件)
~ 受控文件被其他文件阻隔

3.7、svn  delete

svn delete path -m “delete test file”
例如:
1、删除远程服务器文件
svn delete svn://192.168.1.1/pro/domain/test.php  -m “delete test file”
2、删除本地文件,然后提交
svn  delete test.php, 然后再svn ci -m “delete test file”,推荐使用这种
简写:svn (del, remove, rm)

3.8、svn  log

[root@svn svn-test]# svn log test.txt 
------------------------------------------------------------------------
r1 | lawrence | 2019-11-06 21:54:05 +0800 (Wed, 06 Nov 2019) | 1 line

add file
------------------------------------------------------------------------

#查看一段日期的日志
svn log -r {2018-07-03}:{2018-07-09}

#显示某一版本范围的log列表
#显示从r199687到r199385范围的所有带jaspersong字符串的log
svn log -r r103546:r104414 | grep -A 2 jaspersong
#这里说明一下grep -A 2 "jasper"|中A后面数字的差别,不同的数字表示显示的log版本信息不同的行数。

#查看某一版本所修改的文件列表及说明,此命名用得比较多。
svn log -r r196674 -v

#查找分支所有的修改
svn log -v --stop-on-copy $URL

3.9、svn  info  path

[root@svn svn-test]# svn info test.txt 
Path: test.txt
Name: test.txt
Working Copy Root Path: /root/svn-test
URL: svn://10.0.0.201/svn-test/test.txt
Repository Root: svn://10.0.0.201/svn-test
Repository UUID: 66b9f439-5010-441e-8e9b-53af2df44b87
Revision: 1
Node Kind: file
Schedule: normal
Last Changed Author: lawrence
Last Changed Rev: 1
Last Changed Date: 2019-11-06 21:54:05 +0800 (Wed, 06 Nov 2019)
Text Last Updated: 2019-11-06 21:46:14 +0800 (Wed, 06 Nov 2019)
Checksum: 972a1a11f19934401291cc99117ec614933374ce

3.10、svn  diff  path

#默认将修改的文件与基础版本比较。
svn diff test.php
svn diff -r m:n path  #对版本m和版本n比较差异
svn diff -r 200:201 test.php

简写:svn di
--------------------------------------------

[root@svn svn-test]# echo ccc >> test.txt 
[root@svn svn-test]# svn commit -m "modify test.txt" test.txt 
Sending        test.txt
Transmitting file data .
Committed revision 2.
[root@svn svn-test]# svn log test.txt 
------------------------------------------------------------------------
r2 | lawrence | 2019-11-06 22:28:32 +0800 (Wed, 06 Nov 2019) | 1 line

modify test.txt
------------------------------------------------------------------------
r1 | lawrence | 2019-11-06 21:54:05 +0800 (Wed, 06 Nov 2019) | 1 line

add file
------------------------------------------------------------------------
[root@svn svn-test]# svn diff test.txt 
[root@svn svn-test]# svn diff -r 2:1 test.txt 
Index: test.txt
===================================================================
--- test.txt	(revision 2)
+++ test.txt	(revision 1)
@@ -1,2 +1 @@
 aaa
-ccc

3.11、svn  merge  -r  m:n  path

#Linux命令行下将两个版本之间的差异合并到当前文件。
svn merge -r m:n path
svn merge -r 200:205 test.php #将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下。

3.12、svn  help

#Linux命令行下SVN 帮助。
svn help ci

3.13、svn  list  path

#显示path目录下的所有属于版本库的文件和目录。
#简写:svn ls

[root@svn svn-test]# svn status
A       c.txt
A       nn.txt
[root@svn svn-test]# svn ls
b.txt
test.txt

不太常用命令:

参考文档:

https://www.cnblogs.com/jaspersong/p/9277720.html

https://www.runoob.com/svn/svn-tutorial.html

原文地址:https://www.cnblogs.com/hujinzhong/p/11806892.html