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. HDFS知识点

    1.通过代码验证集群的配置文件的优先级 HDFS文件上传 1.编写源代码 @Test public void testCopyFromLocalFile() throws IOException, I ...

  2. spring-cloud /pause 平滑升级 踩坑记录

    0.客户端添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...

  3. C#双缓冲解释

    C#双缓冲解释 简单说就是当我们在进行画图操作时,系统并不是直接把内容呈现到屏幕 C#双缓冲 上,而是先在内存中保存,然后一次性把结果输出来,如果没用双缓冲的话,你会发现在画图过程中屏幕会闪的很厉害, ...

  4. VUE: 移动端长按弹出确认删除地址(后面测试发现IOS有BUG,后面有更新随笔,更新后的亲测有效)

    收货地址的删除方式可能有很多种,我目前见过的暂时只有两种(1.在编辑页删除  2.长按某一条收货地址弹出是否删除地址) 在开发的项目上要求第二种删除方法,于是记录一下我写的代码 ~ 1.首先,在移动端 ...

  5. jq load()方法实现html 模块化。

    在我们写项目的时候,会遇到一个模块在多个页面使用,如果没有页面都写一次,那就太费劲了. 如果你使用了框架(vue,react,Angular)的话,那框架都有模块化,可以轻松解决. 如果你使用原生开发 ...

  6. 记一次zipkin和spring cloud bus冲突

    问题表现spring boot 版本 2.0.6spring cloud 版本 Finchley.SR2 使用spring-cloud-starter-zipkin + 独立部署的zipkin 进行链 ...

  7. 如何使用getattr运行单个函数

    import sys def foo(): print("哈哈想不到吧") if __name__ == '__main__': getattr(sys.modules[__nam ...

  8. light4j轻量级微服务应用

    最近对light-4j轻框架比较感兴趣,于是对现有应用做了一次重构,现将其间的一些点滴所得分享出来. 项目打包 pom.xml配置了两个profile:debug支持mvn exec:exec启动应用 ...

  9. MySql 时区错误

    mysql的时区错误问题: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one ...

  10. IDEA2019 JFormDesigner-6.0.6.2-intellij-idea破解版

    IDEA2019 JFormDesigner-6.0.6.2-intellij-idea破解版 下载链接:百度云 提取码:10ox 下载完后通过idea的本地磁盘安装即可