这次笔者带来版本控制SVN的系列笔记。按照笔者的惯例,系列笔记的第一篇都是基础的环境搭建,先不说太多抽象的知识,因为笔者习惯于在接下去的笔记中贯穿这些知识,润物无声,潜移默化,这是笔者所希望达到的层次。
1. Checking SVN whether exist on CentOS
#查询CentOS是否已安装svn
rpm -aq subversion
出现下图的情况说明已安装
为什么我们需要先查看SVN(subversion)是否已经安装在了CentOS上呢?
如果你看过笔者Linux Series Notes(1)– Installing CentOS7 and configurating something essential of its就会发现笔者在安装的时候并不是选择了最小化的安装方式,而是勾选了一些常用的软件和CentOS一同安装,此时SVN就有可能包括在内了,这样就省去了一些多余的安装时间。当然,如果说是像阿里云、腾讯云这类的产品,如果不选择购买别人制作好的成套安装镜像,那就要从裸机开始了!
#如果没有安装,那么就使用yum进行安装,或者自行下载压缩包进行安装
yum -y install subversion
2. Creating the directory of data
mkdir -p /application/svndata#数据存储根目录
mkdir -p /application/svnpasswd#用户,密码权限目录
这里我们建立了两个目录,其中svndata是用于存储我们需要进行版本控制的数据,也就是说这里是用于创建我们版本控制库(respository)的,;而svnpasswd是用于独立出来用于存储连接SVN的用户和其密码的,主要是authz(权限管理)和passwd(用户和密码管理),这里的passwd是明文存储的,需要十分注意数据的安全性。
3. Starting the SVN
我们先来看看svn拥有的命令,有助于我们理解。
svnserve --help
用法: svnserve [-d | -i | -t | -X] [options]
有效选项:
-d [--daemon] : 后台模式
-i [--inetd] : inetd 模式
-t [--tunnel] : 隧道模式
-X [--listen-once] : 监听一次方式(调试用)
-r [--root] ARG : 服务的根目录
-R [--read-only] : 强制只读;覆盖版本库配置文件
--config-file ARG : 从文件 ARG 读取配置
--listen-port ARG : 监听端口
[方式: daemon, listen-once]
--listen-host ARG : 监听主机名称或IP地址
[方式: daemon, listen-once]
-6 [--prefer-ipv6] : 在使用主机名称监听时,首选 IPv6
[默认首选 IPv4。不支持在守护进程模式中同时使用 IPv4
和 IPv6。如果需要,请使用 inetd 模式或隧道模式。]
-c [--compression] ARG : 用于网络传输的压缩级别
[0 .. 不压缩, 5 .. 默认,
9 .. 最大压缩]
-M [--memory-cache-size] ARG : 用来减少冗余操作的内存中的额外高速缓存的大小(MB)
线程模型的默认值是 128,非线程模型的默认值是 16。
[仅用于 FSFS 仓库]
--cache-txdeltas ARG : 是否对旧版本之间的差异启用缓存
默认值: 否。
[仅用于 FSFS 仓库]
--cache-fulltexts ARG : 是否对文件内容启用缓存
默认值: 是。
[仅用于 FSFS 仓库]
-T [--threads] : 使用线程代替进程 [方式: daemon]
--foreground : 在前台运行(调试用)
[方式: daemon]
--log-file ARG : svnserve 日志文件
--pid-file ARG : 写进程 PID 到文件 ARG
[方式: daemon, listen-once]
--tunnel-user ARG : 隧道用户名(默认是当前UID对应的用户名)
[方式: tunnel]
-h [--help] : 显示本帮助
--version : 显示程序版本信息
-q [--quiet] : 在标准错误输出不显示进度 (仅错误)
接下来我们开始启动SVN:
svnserve -d -r /application/svndata/
这里我们以守护线程的方式启动SVN,并指定SVN服务的根目录,这样连接到我们这个SVN的用户所上传的数据都是存放在这个根目录下了。
接下来我们查看下SVN服务所在端口
netstat -lntup|grep svn
#上面的命令查看到端口后,可以使用接下来的命令查看更详细的端口情况
netstat -lnt|grep 3690
netstat -lntup|grep 3690
lsof -i tcp:3690
lsof -i :3690
4. Creating the version control respository
我们可以通过查看svn的create命令获取一些帮助
svnserve help create
这里给出了创建demo,那么我们跟着demo做就好了。
svnadmin create /application/svndata/sadoc
这里我们创建了sadoc目录,这个目录就是我们接下来要使用TortoiseSVN(windows客户端)连接仓库。
接着我们使用tree(笔者认为它比ls要直观些)来观察sadoc目录下都有哪些文件。
tree /application/svndata
注:没安装的可以使用以下命令进行tree的安装yum install tree
5.Modifying the configuration of SVN
现在我们开始对SVN进行配置文件的配置,在修改配置文件的时候要注意:事前备份,事后检查(检查重点包括:语法和配置文件的配置更改),最后看是否需要重启服务。
在这里我们需要对svnserve.conf进行一次备份,备份是为等下修改完后使用diff来检查下我们修改了哪些地方,而剩下的authz和passwd我们是复制副本放到/application/svnpasswd
下cp authz passwd /application/svnpasswd/
,也算是做了备份。
注:svnserve.conf修改后是需要重启SVN服务,而authz和passwd修改后可以不进行SVN的重启
5.1 svnserve.conf
修改成下面的配置
在这里如果anon-access = yes
,也就是允许匿名连接,这样会造成一个问题:使用TortoiseSVN进行文件的上传的时候只能选择1970/01/01的时间,而且log的信息,如下图:
修改完后,我们使用diff和egrep查看修改
5.1.1 diff
diff svnserve.conf.tmp svnseve.conf
5.1.2 egrep
egrep "\-application|\-db =" svnserve.conf
5.2 passwd
我们把passwd和authz放置到/svnpasswd下时需要先查看文件的权限,如果文件的权限过于宽松我们还需要进行权限修改,避免后期发生令人迷惑的事故。
这权限明显过于宽松,我们现在开始赋予新的权限。
chmod 700 /application/svnpasswd/*
现在我们开始添加用户和密码。
cd /application/svnpasswd/
vim passwd#密码为明文,需要注意密码的权限
SVN是比较人性化的,每个配置文件都会给出详细的说明以及例子,我们需要认真阅读说明并严格按照例子的格式进行配置,避免出现语法错误。
5.3 authz
authz是对我们刚刚配置用户进行权限的赋予,要注意不能对一个没有出现在passwd的用户进行权限赋予。
这里[groups]是对用户进行分组,[/]这里的* =
配置是为了通配任意用户([/]准确来说是表示根目录以及以下,根目录是svnserve启动时指定的,比如我们指定的是svnserve -d -r /application/svndata
,此时表示对全部版本库设置权限),赋予空权限,[sadoc:/]这里是赋予sadoc respository这个根版本库下目录的访问权限给特定的用户或者特定的一组用户。
5.4 reboot SVN
pkill svnserve#先杀死线程
svnserve -d -r /application/svndata/#再次启动
6. Using TortoiseSVN to connect with SVN on remote server
6.1 SVN服务的访问方式
主要包括以下3种:
- 独立服务器访问
访问地址:svn://server_addr/respository。我们这次的TortoiseSVN主要访问方式就是这种。 - 借助apache此类http服务
访问地址:http://server_addr/respository。这种http的服务有两种安装方式,包括单独安装apache和SVN还有就是CSVN整合安装(这是带有web界面管理的SVN软件)。 - 本地直接访问
访问地址:file:///server_addr/respository。这主要用在服务器端。
给出一个表格来更加详细地说明客户端对服务端SVN的访问。
访问方式 | 说明 |
---|---|
File:// | 直接通过本地磁盘或者网络磁盘访问版本库 |
http:// | 通过webDAV协议访问支持subversion的apache服务器 |
https:// | 与http://相似,但是用SSL加密访问 |
Svn:// | 通过TCP/IP自定义协议访问svnserve服务器 |
Svn+ssh:// | 通过认证并加密的TCP/IP自定义协议访问svnserve服务器 |
6.2 TortoiseSVN
安装就不说了。
现在我们先新建一个目录,这个目录是用于同步远程的SVN repository的。然后右键找到TortoiseSVN的操作菜单中checkout选项,把远程SVN respository下载下来。
下面是连接过程中的部分截图
现在我们来尝试上传文件,因为我们已经开始使用SVN进行了团队的开发(即使不是,但我们仍然是使用了SVN)就要记住:任何时候先update下载SVN中最新的版本下来,再commit我们修改文件到SVN,如果我们发生了提交的冲突,也是先update然后右键找到TortoiseSVN的操作菜单中resolve选项解决冲突。
注:文件名最好不要带空格,会给后面我们使用hooks带来麻烦,这是第一次示范,先不管先,以后空格记得先用下划线“_”替代再commit
这就上传成功了。
我们可以通过以下方式进行查看。
好了,这次就先到这了!
在这里推荐下老男孩的linux课程。
感谢各位的支持!如果note有错漏,恳请各位留下评论指出,笔者会及时改正!
谢谢!