SVN服务的部署及使用
环境说明
系统版本 CentOS 7.2 x86_64
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。svn服务器有2种运行方式:独立服务器和借助apache运行。两种方式各有利弊,用户可以自行选择。
svnserve是SVN自带的一个轻型服务器,客户端通过使用以svn://或svn+ssh://为前缀的URL来访问svnserve服务器,实现远程访问SVN版本库。svnserve可以通过配置文件来设置用户和口令,以及按路径控制版本库访问权限。本文详细分析了svnserve配置文件格式,并说明如何使用配置文件控制版本库访问权限
svn的版本管理其最大的特点就是集中式,所有的项目代码文件都放在svn服务器上,客户端并不具有全部项目代码文件,因此对svn服务器的设备要求较高
1、服务端安装配置
[root@svn-server ~]# yum install -y subversion
[root@svn-server ~]# mkdir -p /application/svndata #创建svn的版本库的根目录
[root@svn-server ~]# mkdir -p /application/svnpasswd #创建svn的密码权限目录
[root@svn-server ~]# svnserve -d -r /application/svndata #启动,指定svn的根目录(-d: 后台运行,-r:路径)
[root@svn-server ~]# netstat -lntup|grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 2231/svnserve
建立版本库(也可以理解为是一个项目,这个目录不能用mkdir来创建,因为svn有自己运行方式,会创立属于svn自己很多的文件)
[root@svn-server ~]# svnadmin create /application/svndata/sadoc
修改配置文件
[root@svn-server ~]# cd /application/svndata/sadoc/conf/
[root@svn-server conf]# cp svnserve.conf svnserve.conf.bak
[root@svn-server conf]# vim svnserve.conf
[general]
anon-access=none #控制非鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。
即"write"为可读可写,"read"为只读,"none"表示无访问权限。
缺省值:read
auth-access=write #控制鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。
即"write"为可读可写,"read"为只读,"none"表示无访问权限。
缺省值:write
password-db = passwd #指定用户名口令文件名。除非指定绝对路径,否则文件位置为相对conf
目录的相对路径。
缺省值:passwd
authz-db = authz #指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。
除非指定绝对路径,否则文件位置为相对conf目录的相对路径。
缺省值:authz
realm= My First Repository #指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的
认证域相同,建议使用相同的用户名口令数据文件。
缺省值:一个UUID(Universal Unique IDentifier,全局唯一标示)
[root@svn-server conf]# pwd
/application/svndata/sadoc/conf
[root@svn-server conf]# chmod 700 * #修改权限(原来的权限为644,任何人都可以看到, svn的密码是明文的)
[root@svn-server conf]# vim passwd #末行添加以下用户
[users]
test1 = 1111
test2 = 2222
test3 = 3333
用户名口令文件由svnserve.conf的配置项password-db指定,缺省为conf目录中的passwd。该文件仅由一个[users]配置段组成。
[users]配置段的配置行格式如下:
<用户名> = <口令>
注意:配置行中的口令为未经过任何处理的明文
[root@svn-server conf]# vim authz
dev = test1,test2 #定义组名和组成员(在passwd里定义的)
ops = test3 #定义组名和组成员
[sadoc:/] #定义项目额权限:
项目名称sadoc,表示该项目下所有内容允许谁可以有什么权限
@dev = rw #允许某个组dev来访问,则前面要加@这个符号来标识下
@ops = r #允许ops组来查看
test3 = r #允许用户test3来查看
权限配置文件由svnserve.conf的配置项authz-db指定,缺省为conf目录中的authz。该配置文件由一个[groups]配置段和若干个版本库路径权限段组成。
[groups]配置段中配置行格式如下:
<用户组> = <用户列表>
用户列表由若干个用户组或用户名构成,用户组或用户名之间用逗号","分隔,引用用户组时要使用前缀"@"(如:引用用户组"all"要使用字符串"@all")。
版本库路径权限段的段名格式如下:
[<版本库名>:<路径>]
如版本库abc路径/tmp的版本库路径权限段的段名为"[abc:/tmp]"。
可省略段名中的版本库名。若省略版本库名,则该版本库路径权限段对所有版本库中相同路径的访问控制都有效。如:段名为"[/tmp]"的版本库路径权限段设置了所有引用该权限配置文件的版本库中目录"/tmp"的访问权限。
版本库路径权限段中配置行格式有如下三种:
<用户名> = <权限>
<用户组> = <权限>
* = <权限>
其中,"*"表示任何用户;权限的取值范围为''、'r'和'rw',''表示对该版本库路径无任何权限,'r'表示具有只读权限,'rw'表示有读写权限。
注意:每行配置只能配置单个用户或用户组。
配置文件保存后就立即生效,重启或者不重启svnserve服务都可以
[root@svn-server conf]# pkill svnserve
[root@svn-server conf]# svnserve -d -r /application/svndata #重新启动svn
[root@svn-server conf]# netstat -lntup|grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 2309/svnserve
启动到svndata这个目录,所以在客户端访问的URL中末尾续接上/sadoc,假如只有1个项目时,就可以 svnserve .../application/svndata/sadoc,直接输入地址svn://xxx.xxx.xxx.xxx即可访问
[root@svn-server conf]# vim /etc/rc.d/rc.local #将svn加入到开机启动
/usr/bin/svnserve -d -r /application/svndata
SVN配置详细信息参考:https://blog.csdn.net/thinkerabc/article/details/1831025
2、客户端配置和使用
2.1 Linux客户端使用svn
[root@svn-client ~]# yum install -y subversion
基本操作:
[root@svn-client ~]# svn checkout svn://10.0.0.10/sadoc #导出
认证领域: <svn://10.0.0.10:3690> My First Repository
"root"的密码:
认证领域: <svn://10.0.0.10:3690> My First Repository
用户名: test1
"test1"的密码:
-----------------------------------------------------------------------
注意! 你的密码,对于认证域:
<svn://10.0.0.10:3690> My First Repository
只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。
你可以通过在"/root/.subversion/servers"中设置选项"store-plaintext-passwords"为"yes"或"no",
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?yes
A sadoc/.bash_logout
A sadoc/.tcshrc
A sadoc/.viminfo
A sadoc/.bash_profile
A sadoc/.bash_history
A sadoc/.subversion
A sadoc/.subversion/servers
A sadoc/.subversion/README.txt
A sadoc/.subversion/auth
A sadoc/.subversion/auth/svn.username
A sadoc/.subversion/auth/svn.ssl.client-passphrase
A sadoc/.subversion/auth/svn.ssl.server
A sadoc/.subversion/auth/svn.simple
A sadoc/.subversion/auth/svn.simple/02f30398314dca65b675ce5570f28e52
A sadoc/.subversion/config
A sadoc/anaconda-ks.cfg
A sadoc/.bashrc
A sadoc/.cshrc
取出版本 1。
[root@svn-client ~]# svn import /service/tools/jeesns.jsp svn://10.0.0.10/sadoc -m "version1" #导入某个代码文件
[root@svn-client ~]# svn ls svn://10.0.0.10/sadoc #查看svn中的数据
附:常用命令(参考自https://blog.csdn.net/liuchong_lch/article/details/78192755)
1、将文件checkout到本地
svn checkout path(path是服务器的目录)
例如 :svn checkout svn://192.168.1.1/pro/domain
2、往版本库中添加新的文件
svn add filename
例如:svn add test.cpp
3、将改动的文件提交到版本库
svn commit -m "注释" [-N] [--no-unlock] PATH(如果选择了保持锁,就使用--no-unlock开关)
例如:svn commit -m "注释" test.cpp
简写:svn ci
4、加锁/解锁
svn lock -m "注释" path
例如: svn lock -m "注释" test.cpp
svn unlock path
5、更新到某个版本
svn update -r 版本号 path
svn update 更新当前目录以及子目录下的所有文件到最新版本
svn upate -r 200 test.cpp 将版本库中的test.cpp还原到版本200
简写 svn up
6、查看文件或者目录状态
(1)svn status path (显示目录下的文件和子目录下的文件状态,正常状态不显示)
【?:不在svn控制中;M:内容被修改;C:发生冲突;A:预定义加入到版本库;K:被锁定】
(2)svn status -v path (显示文件和子目录状态)
注意:svn status、svn diff和svn revert这三条命令在没有网络情况下可以执行,因为svn在本地.svn中保留了本地版本原始拷贝。
简写: svn st
7、删除文件
svn delete path -m "注释"
例如: svn delete svn://192.168.1.1/pro/domain/test.cpp -m "delete test file"
或者直接svn delete test.php 然后再svn ci -m 'delete test file',推荐使用这种
简写: svn (del、remove、rm)
8、查看日志
svn log path
9、查看文件详细信息
svn info path
10、比较差异
svn diff path(将修改的文件与基础版本比较)
svn diff -r m:n (将修改的文件m版本和n版本比较)
简写 svn di
11、将两个版本的文件的差异合并到当前文件
svn merge -r m:n path
例如:svn
merge -r 20:25 test.cpp(将版本20与25之间的差异合并到当前文件,但一般会发生冲突,需要处理一下)
12、SVN帮助
svn help
以上为常用命令,下面为不常用命令
13、查看版本库下的文件和列表
svn list path (显示path目录下的所属于版本的文件和目录)
简写: svn ls
14、创建纳入版本控制下的新目录
svn mkdir: 创建纳入版本控制下的新目录。
用法: 1、mkdir PATH...
2、mkdir URL...
创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。在这两个情况下,所有的中间目录都必须事先存在。
15、恢复本地修改
svn revert:恢复原始未改变的工作副本文件(恢复大部分的本地修改)revert用法:revert path
注意:本子命令不会存储网络,并且会解除冲突的情况。但它不会恢复被创建的目录
16、代码库URL变更
svn switch(sw): 更新工作副本到不同的URL。
用法
1、switch URL [PATH]
2、switch --relocate FROM TO [PATH]
1、更新工作副本,映射到一个新的URL,会将服务上的文件与本地文件合并。这是将工作副本对应到同一创库的某个分支或者标记的方法。
2、改写工作副本URL元数据,以反映URL的变更,创库URL变动但工作副本仍旧对映同一创库的同一目录时使用该命令更新工作副本与创库的对应关系。
17、解决冲突
svn resolved:移除工作副本的目录或文件的"冲突"状态。
用法 resolved path
注意:本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让path可以再次提交。
18、输出指定文件的URL内容
svn cat 目标[@版本] 如果指定了版本将从指定的版本开始查找。
2.2 windows客户端使用svn
下载TortoiseSVN客户端,下载地址https://tortoisesvn.net/downloads.html,这个地址也提供了语言包的下载,选择需要下载的语言包,在安装完TortoiseSVN后安装语言包即可,图形界面使用简单使用指南,这里不想多说,可以参考https://blog.csdn.net/maplejaw_/article/details/52874348
SVN服务的部署及使用的更多相关文章
- Linux简单部署svn服务
最近需要练习一下svn的命令行使用方法,以便编写自动化部署的脚本,但是不敢用正式的svn库进行练习,所以自己部署了一个svn服务,用来练习 1.安装svn server 我用的是ubuntu $apt ...
- Linux环境下部署svn服务详解
说明 环境: 操作系统:centos 8.0 IP:39.100.228.13 安装 用ROOT账号登录,在控制台执行以下命令,一直默认安装就好可以了. [root@localhost ~]#yum ...
- [环境部署] Linux搭建SVN服务器之Centos篇
使用 service iptables stop 关闭防火墙 安装步骤如下: 1.yum install subversion2.输入rpm -ql subversion查看安装位置,如下:rpm - ...
- linux svn 服务端搭建
环境是centos6.x. 关于团队对代码管理,相信大部分人习惯于svn.不过我个人比较喜欢git的.这个blog git 常用命令 就是介绍git的基本用法.现部署svn服务端方式如下: 1. 用y ...
- SVN 服务端 和 客户端
网址大全 | EF CodeFirst | 电视 | MyNPOI | 开源 | 我的皮肤 | ASP.NET MVC4 | 前端提升 | LINQ | WCF ...
- svn服务,svnserve开机启动
在服务器(我的环境是centos6.5)上部署完svn之后,一般都希望每次重启的时候svn服务能够随着启动.上网搜索了一下,一般有两种做法: 一.启动脚本+/etc/rc.local启动 1. 在某个 ...
- jenkins+svn+pipeline+kubernetes部署java应用(一)
一.linux安装svn服务端 yum -y install subversion 二.创建svn版本库(项目仓库) mkdir -p /home/svn svnadmin create /home/ ...
- svn服务
svn服务实战应用指南 1.1 svn介绍 什么是svn? svn(sub-version)是近年来崛起的非常优秀的版本管理工具,与cvs管理工具一样,svn是一个跨平台的开源的版本控制系统, ...
- Centos7 配置 svn服务端
转载至:Linux(阿里云Centos7)环境下搭建svn服务器以及权限配置详细步骤 本篇文章主要介绍在CentOS7中采用yum安装方式.优点:简单,一键安装,不用手动配置环境变量等.缺点:安装位置 ...
随机推荐
- Jmeter4.0启动闪退问题解决方案
jmeter:4.0 jdk版本:1.8 在Jmeter.bat的最后添加pause可以让Jmeter启动停止: 添加了pause进行强制停止在启动命令页面,查看到Jmeter报错信息如下: 第一次解 ...
- pressmuSpiderr
#!/usr/bin/env python # encoding: utf-8 import requests from random import choice from lxml import h ...
- Java坦克大战 (四) 之子弹的产生
本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...
- MYSQL 的异常CRASH事件处理
检查问题的过程****************************************************************************************** ps ...
- php多台服务器实现session共享
使用Redis存储Session(前提是服务期间已实现redis共享,可参照:laravel项目使用twemproxy部署redis集群) 修改php.ini: session.save_handle ...
- Redis 源码走读(一)事件驱动机制与命令处理
eventloop 从 server.c 的 main 方法看起 int main(int argc, char **argv) { ....... aeSetBeforeSleepProc(serv ...
- PHP开发经常遇到的几个错误
错误1:foreach循环后留下悬挂指针 在foreach循环中,如果我们需要更改迭代的元素或是为了提高效率,运用引用是一个好办法: $arr = array(1,2,3,4); foreach($a ...
- LCIS最长公共上升子序列
最长公共上升子序列LCIS,如字面意思,就是在对于两个数列A和B的最长的单调递增的公共子序列. 这道题目是LCS和LIS的综合. 在LIS中,我们通过两重循环枚举当序列以当前位置为结尾时,A序列中当前 ...
- 状压DP【p2622】 关灯问题II
题目描述--->P2622 关灯问题II 没用的话: 首先第一眼看到题,嗯?n<=10?搜索? 满心欢喜地敲了一通搜索. 交上去,Wa声一片? 全部MLE! 这么坑人神奇? 一想,可能是爆 ...
- Codeforces 785E Anton and Permutation(分块)
[题目链接] http://codeforces.com/contest/785/problem/E [题目大意] 一个1到n顺序排列的数列,每次选择两个位置的数进行交换,求交换后的数列的逆序对数 [ ...