SVN(linux版)安装与使用

一 简述: 

SVN有2种运行方式,一种是 linux自带的轻量级服务器svnserve,一种是基于Apache的。

基于svnserve的,默认端口为3690,通过“svnserve -d -r 目录 端口” 命令启动。使用的是svn协议。

基于Apache的,默认端口为Apache的默认端口80。配置好后apache启动就可以访问。使用的是http协议。

一项目,由于部署在内网,外网通过nginx转发,那就只能通过http转发,只能采用apache这种方式了。即nginx+apache+svn。

二: 安装

  • 2.1) svnserve 运行模式

Linux下单独安装SVN,那就是安装svnserve这种了。

步骤参考:

https://blog.csdn.net/zhihua_w/article/details/80631403

https://blog.csdn.net/qq_27868061/article/details/81094187

主要步骤与命令:

1. 查看是否安装/版本号

svnserve --version

注意:使用以下命令安装的,一般版本会比较低一些(1.06),如果需要使用最新版本(1.12),只能到官网上下载源代码版,然后手工编译。

2. 安装命令(centos)

yum install subversion

安装命令(suse)

zypper  install subversion

如果没有找到,可以按以下方式配置安装源

zypper ar http://ftp5.gwdg.de/pub/opensuse/discontinued/distribution/12.2/repo/oss/ svnpkg

zypper refresh

3)查看安装目录

whereis subversion

4)创建一个SVN仓库目录

svnadmin create myProject

如:svnadmin create /home/svn/repos1

进入文件夹查看可看到文件夹包含了conf、db、format、hooks、locks、 README.txt等文件,说明一个SVN库已经建立。

5) 用户配置

conf下几个文件authz,passwd,svnserve.conf。其中authz 是权限控制,可以设置哪些用户可以访问哪些目录,passwd是设置用户和密码的,svnserve是设置svn相关的操作

5.1配置 svnserv.conf

# vim svnserv.conf
[general]
anon-access = none     # 使非授权用户无法访问
auth-access = write    # 使授权用户有写权限
password-db = password   # 用户密码文件
authz-db = authz       # 访问控制文件
realm = /home/svn/project # 认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字。
# 采用默认配置,以上语句都必须顶格写,左侧不能留空格,否则会出错。
5.2.配置passwd(格式:帐号=密码)

[users]
# harry = harryssecret
# sally = sallyssecret
username = 123456

注: 这种配置的不好是密码没有加密,最好用htpasswd的方式创建,下有。
5.3.配置authz权限

# 在末尾添加如下代码
[/]
username = rw 
# r:读,w:写

6) 启动服务

指定端口启动:svnserve -d -r /etc/subversion/myProject/ --listen-port 9092

例:svnserve -d -r /home/svn/ --listen-port 9092

7) 测试访问

防火墙临时放开端口:iptables -I INPUT -ptcp --dport 9092 -j ACCEPT

访问:svn://IP:端口

如:svn://127.0.0.1:9092

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

2) apache 运行模式

如果需要通过http这种方式访问,那就需要apache的协助,安装apache的mod_dav协议模块。

1. 获取一下svn的源码包版本:

http://subversion.apache.org/download.cgi#recommended-release

2. 编译svn让生成mod_dav_svn.so与mod_auth_svn.so

./configure --prefix=/usr/local/subversion --with-apr=/usr/local/apr --with-apxs=/usr/local/apache2/bin/apxs --with-zlib --enable-maintainer-mode  --with-apr-util=/usr/local/apr-util --with-lz4=internal  --with-utf8proc=internal

红色部分路径按实际修改,如有些环境的apache是安装在/usr/local/httpd目录下的;另外,测试过--with-apxs这个可以不加,会自动去目标服务器上搜索寻找。

make

make install

如果只是为了生成mod_dav_svn.so与mod_auth_svn.so两个文件,这个make install可以不用操作。

3. 配置生效apache的mod_dav_svn模块关联

1) 将mod_dav_svn.so与mod_auth_svn.so 复制到apache的modules目录下

2) 配置httpd.conf模块,增加mod_dav_svn的配置

配置apache通过mod_dav_svn模块访问SVN服务器,在文件的最后添加:
vim /usr/locol/httpd/conf/httpd.conf
 
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
<Location/svn>
DAV svn
SVNParentPath /home/svn111 ----存放仓库
AuthType Basic
AuthName"SVN server of test!"
AuthUserFile /home/svn111/passwd  ----passwd存储用户名和密码,自定义
AuthzSVNAccessFile /home/svn111/auth  ----存放用户的权限,自定义
Require valid-user
</Location>   

4. 重启apache启动svn服务

说明:这种方式下,这样就可以访问svn了。

5.增加用户与密码(注意apache版的需要使用htpasswd创建)

htpasswd -c  /home/svn111/repos1/.passwd admin

这时不需要配置svnserv.conf等文件

新增用户:

htpasswd -b .passwd 用户 密码

6. 配置用户权限
vi auth.conf

7. 配置SVN提交时强制写日志(可选)

SVN默认可以不写注释提交,有时候可能忘记写注释,有的人也没有写注释的习惯,导致翻看history的时候都不知道做了哪些更改,可以依照以下步骤修改SVN配置,强制提交SVN前写注释

cd /home/svn/hooks
cp pre-commit.tmpl pre-commit
chmod 700 pre-commit #获取可执行权限
vi pre-commit
REPOS="$1"
TXN="$2"
comment=0
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
   grep "[a-zA-Z0-9\u4e00-\u9fa5]" || comment=1
if [ $comment -eq 1 ]
then
    echo "请填写中文或者英文备注" 1>&2
    exit 1
else
    exit 0
fi

说明:

编译subversion的时候,会有一些依赖包,sqlite3,apr,apr-util这3个是必须的,需要提前安装配置好。

1) sqlite安装

sqlite不需要安装,只需要解压,复制到svn解压后的源码包中即可。

下载路径:https://www.sqlite.org/2015/sqlite-amalgamation-3081101.zip

unzip sqlite-amalgamation-3240000.zip

mv sqlite-amalgamation-3240000 subversion-1.10.0/sqlite-amalgamation

 
2)apr-util安装
     tar -zxf apr-util-1.6.1.tar.gz 
cd ./apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
 

这里需要注意./configure命令,这个命令作为编译配置有很多选项,如果失败,需要添加合适的选项,错误如下:

错误1:configure: error: Subversion requires LZ4 >= r129, or use --with-lz4=internal
解决:./configure命令添加 --with-lz4=internal选项

错误2:configure: error: Subversion requires UTF8PROC
解决:./configure命令添加  --with-utf8proc=internal

错误3:配置好mod_dav_svn配置后重启apache时,如果报make: *** [subversion/libsvn_subr/libsvn_subr-1.la]  error 1,那就表麻烦了,还是说明这两个mod_dav_svn.so与mod_auth_svn.so如果从别的地方copy过来,而不是编译的话,会有很多依赖包的关系识别不到。只能本地重新编译了。

/home/admin/subversion-1.10.4/subversion/libsvn_subr/xml.c:70: undefined reference to `XML_ExpatVersion'
.libs/xml.o: In function `expat_start_handler':

...

1.10.4/subversion/libsvn_subr/xml.c:536: undefined reference to `XML_SetCharacterDataHandler'
/home/admin/subversion-1.10.4/subversion/libsvn_subr/xml.c:538: undefined reference to `XML_SetEntityDeclHandler'
collect2: ld returned 1 exit status
make: *** [subversion/libsvn_subr/libsvn_subr-1.la] 错误 1

错误4:编译过程如果报  /lib64/libc.so.6: version `GLIBC_2.14' not found,则需要下载GLIBC_2.17以上重新安装

参考:https://www.cnblogs.com/bonelee/p/8310389.html

如果这过程,编译的库失败导致出现系统连接不上等lib库无法使用问题,则需要回退

LD_PRELOAD=/lib64/libc-2.14.so rm /lib64/libc.so.6

LD_PRELOAD=/lib64/libc-2.14.so ln -s /lib64/libc-2.14.so /lib64/libc.so.6

错误5:编译过程如果报 configure: error: no XML parser was found: expat or libxml 2.x required

wget http://sourceforge.net/projects/expat/files/expat/2.1.0/expat-2.1.0.tar.gz/download

安装 expat 后重新安装即可

获取 neno configure后目录下的libtool,替换到svn的安装目录下,重新编译

错误6:Svn 不能打开文件 '*****/db/txn-current-lock': 权限不够

https://blog.csdn.net/qq_36014367/article/details/84098634

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

三:subversion目录说明:

├── conf
│   ├── authz   配置用户组权限
│   ├── passwd  配置用户/用户组密码
│   └── svnserve.conf  配置文件主入口
├── db
│   ├── current
│   ├── format
│   ├── fsfs.conf
│   ├── fs-type
│   ├── min-unpacked-rev
│   ├── rep-cache.db
│   ├── revprops
│   │   └── 0
│   │       ├── 0
│   │       ├── 1
│   │       ├── 2
│   │       └── 3
│   ├── revs  --上传的文件放到这里
│   │   └── 0
│   │       ├── 0
│   │       ├── 1
│   │       ├── 2
│   │       └── 3
│   ├── transactions
│   ├── txn-current
│   ├── txn-current-lock
│   ├── txn-protorevs
│   ├── uuid
│   └── write-lock
├── format
├── hooks
│   ├── post-commit.tmpl
│   ├── post-lock.tmpl
│   ├── post-revprop-change.tmpl
│   ├── post-unlock.tmpl
│   ├── pre-commit.tmpl
│   ├── pre-lock.tmpl
│   ├── pre-revprop-change.tmpl
│   ├── pre-unlock.tmpl
│   └── start-commit.tmpl
├── locks
│   ├── db.lock
│   └── db-logs.lock
└── README.txt

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

四: SVN的备份&备份恢复

参考:

https://www.cnblogs.com/pipi928/p/7448586.html

https://blog.csdn.net/baidu_38432732/article/details/80637937

首次备份(全量备份): svnadmin hotcopy 待备份的目录 备份到的目录

后续备份(增量备份): svnadmin dump 待备份的目录  --incremental  --r [--revision]  > 备份到的目录 -q [--quiet]

说明:

1. svnadmin hotcopy是将整个库都“热”拷贝一份出来,包括库的钩子脚本、配置文件等;任何时候运行这个脚本都得到一个版本库的安全拷贝,不管是否有其他进程正在使用版本库。

2. 增量备份需要先查看下当前最新的版本号,svnlook youngest查看一下project最新的版本号,显示最新版本记录为4。-q [--quiet] :在标准错误输出不显示进度(仅错误)

备份恢复:

svnadmin create /svn/project/test  #创建一个新的版本库
svnadmin load /svn/project/test < full.svn.bak  #现还原完全备份

SVN(linux版)安装与使用的更多相关文章

  1. FinalShell Mac OS版,Linux版安装及教程

    该版本功能和windows版基本一样,但是主机检测和远程桌面功能由于兼容性问题暂时无法使用,以后会支持. 该版本功能和windows版基本一样,但是主机检测和远程桌面功能由于兼容性问题暂时无法使用,以 ...

  2. FinalShell Mac OS版,Linux版安装及教程(Mac下的xshell)

    用户QQ群 342045988 Mac版安装路径/Applications/finalshelldata Linux版安装路径/usr/lib/finalshelldata 注意:1.FinalShe ...

  3. CENTOS6 下MATLAB2014b的安装和破解(Matlab_R2014b linux版 安装笔记)

    参考:http://www.jianshu.com/p/f0cefc737dda ①在下载matlab linux版.iso, ②在windows下用ULTRAISO软件提取 ③用crack中的ins ...

  4. 搜狗拼音输入法LINUX版安装

    搜狗拼音输入法LINUX版官方下载: http://pinyin.sogou.com/linux/?r=pinyin 一.添加fcitx的nightlyPPA 在终端中输入: sudo add-apt ...

  5. MySql的Linux版安装

    1,官网下载MySql的Linux版: 下载地址:http://dev.mysql.com//downloads/mysql/ 2.上传到Linux服务器,建议放在/opt/目录下 3.检查当前系统是 ...

  6. Redis Linux版安装详解

    Redis介绍 我的Linux系统是CentOS7 1.安装Redis 官方下载地址:http://download.redis.io 使用Linux下载:wget http://download.r ...

  7. 网防G01管理检测系统Linux版安装

    监测包内容: gov_defence_agent_x64_linux_v3.1.18.tar.gz LinuxVersion(datalog.sh  getlog.sh  setup.sh) 1.  ...

  8. [php][thinkphp] 记一次Composer Linux版安装以及用它进行thinkphp项目初始化

    Composer安装thinkphp,thinkphp5.1开始官网不在提供下载包,只能通过git clone 和Composer包管理器进行下载. php中开启exec,system等函数调用系统命 ...

  9. 阿里云服务器Linux CentOS安装配置(二)yum安装svn

    阿里云服务器Linux CentOS安装配置(二)yum安装svn 1.secureCRT连接服务器 2.先创建一个文件夹,用来按自己的习惯来,用来存放数据 mkdir /data 3.yum安装sv ...

随机推荐

  1. robotframework 获取坐标

    Get Horizontal Position  获取X轴坐标 Get Vertical Position      获取Y轴坐标 Get Element Size          获取整个图表的高 ...

  2. java常见问题 ——编辑报错1

    报错1 The method add(CatNode) in the type List<CatNode> is not applicable for the arguments (Str ...

  3. .net大文件上传断点续传源码

    IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...

  4. MessagePack Java Jackson 在不关闭输入流(input stream)的情况下反序列化多变量

    com.fasterxml.jackson.databind.ObjectMapper 在读取输入流变量的时候默认的将会关闭输入流. 如果你不希望关闭输入流,你可以设置 JsonParser.Feat ...

  5. Qbxt AH d4 && day-6

    /* 这两天考试直接呵呵了. 赶脚对qbxt的题目无感. 同时也发现了自己的一些问题. 一些思路题总是自己傻逼的挖个坑跳进去. 这两天场场倒数ORZ. 始终是最弱的.... 然后NOIP光荣三等奖了吧 ...

  6. 重启php7.0-fpm

    /etc/init.d/php7.0-fpm restart

  7. reactjs 项目使用 iconfont 小图标以及使用带颜色 inconfont 小图标

    在 reactjs 项目中是所有小图标目前主要分为两类使用方式,第一类通过 CSS 引入的方式使用,第二类使用 JS 的方式引入使用. 注册-登录-建立项目-选中图标添加到购物车-添加至项目-下载到本 ...

  8. 微信小程序_(校园视)开发用户注册登陆

    微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...

  9. pyton3的数字操作你都会用吗?

    '''数字数据类型用于存储数值.数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配空间. 1.del(用于删除一些数字对象的引用) 2.整形(int)通常被称为是整形或者整数,是正 ...

  10. C++ this指针的理解

    先要理解class的意思.class应该理解为一种类型,象 int,char一样,是用户自定义的类型.虽然比int char这样build-in类型复杂的多,但首先要理解它们一样是类型.用这个类型可以 ...