这次笔者带来版本控制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/svnpasswdcp authz passwd /application/svnpasswd/,也算是做了备份。
注:svnserve.conf修改后是需要重启SVN服务,而authz和passwd修改后可以不进行SVN的重启

5.1 svnserve.conf

修改成下面的配置

在这里如果anon-access = yes,也就是允许匿名连接,这样会造成一个问题:使用TortoiseSVN进行文件的上传的时候只能选择1970/01/01的时间,而且log的信息,如下图:

修改完后,我们使用diffegrep查看修改

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种:

  1. 独立服务器访问
    访问地址:svn://server_addr/respository。我们这次的TortoiseSVN主要访问方式就是这种。
  2. 借助apache此类http服务
    访问地址:http://server_addr/respository。这种http的服务有两种安装方式,包括单独安装apache和SVN还有就是CSVN整合安装(这是带有web界面管理的SVN软件)。
  3. 本地直接访问
    访问地址: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有错漏,恳请各位留下评论指出,笔者会及时改正!
谢谢!

SVN Version Control(1) --Installing SVN on CentOS相关推荐

  1. xcode svn commit is not under version control 和 git常用指令

    使用Xcode提交一个第三方库时,由于包含资源文件,总是提交不了,提示报错:XXX commit is not under version control (1) 网上查了下,得知 xcode对于sv ...

  2. svn is already under version control问题解决

    svn ci 时出现 xx is already under version control,然后无法提交,出现这个问题的原因是你所提交的文件或目录是其他SVN的东西,即下面有.svn的目录,需要先把 ...

  3. Introduction of Version Control/Git, SVN

    Introduction of Version Control/Git, SVN 什么是版本控制? 你可以把一个版本控制系统(缩写VCS)理解为一个"数据库",在需要的时候,它可以 ...

  4. 【引】Version Control System - SVN - Developing and Deploying with Branches

    引自: Developing and Deploying with Branches Deployments Best Practices Developing and Deploying with ...

  5. svn上传文件时出现 “xxx is already under version control” 报错

    昨天老师让我把之前上传的一个文件夹里不必要的文件删除,我就先把这个文件夹整个都在库里删除了,想在本地整理好了,再把这个文件夹上传. 用到命令:[svn delete 文件夹名] [svn ci -m ...

  6. [zhuan] svn is already under version control问题解决

    [zhuan] svn is already under version control问题解决 参考文章: (1)[zhuan] svn is already under version contr ...

  7. version control(版本控制)

    版本控制系统(version control system),是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的 ...

  8. svn: E155036: Please see the ‘svn upgrade‘

    解决方法: 1.执行cmd命令,并切换目录到idea的工程目录文件夹 2.执行 svn upgrade . 3.回到intellij idea工具中,点开Version Control,工具栏,点击左 ...

  9. svn比较本地与svn差异_如何从SVN差异中删除SVN属性

    svn比较本地与svn差异 I use SVN for my projects version control system. Sometimes I need to see the differen ...

最新文章

  1. MFC-4简单的窗口重绘(非部分重绘)
  2. echart 数据点可以加链接吗_地理可视化就这么简单、酷炫,蚂蚁金服AntV 空间数据可视化引擎 L72.0发布...
  3. 【转】JVM 架构解读
  4. 我当测试总监的那几年
  5. Node.js:Node基础
  6. gridview的sort_GRIDVIEW排序的方法
  7. JSONObject.fromObject - JSON与对象的转换
  8. 字段计算器python教程_字段计算器综合(python-02)
  9. java播放mp3/ogg/ape/flac音乐
  10. position:fixed;支持ie6,清除e6下抖动。
  11. 计算机替换字体怎么操作,电脑怎么更换字体-电脑更换字体的方法 - 河东软件园...
  12. 【Python】《Python网络爬虫权威指南》第三章任务:验证六度分隔理论
  13. 列的完整性约束——设置表字段的外键约束(FOREIGN KEY,FK)
  14. 做不好资产清点的网络安全防护都是耍流氓
  15. fluent什么时候用滑移网格_Fluent转子定子系统的流体动力学计算
  16. 字节跳动头条2022测试开发岗 3+1 面经+经验分享(收到offer,入职月薪30K)
  17. 前沿笔记|Eva:基于AI强化学习的COVID-19检测判断模型|Nature
  18. cisco anyconnect 下载(windows、macos、iOS、Android、linux)
  19. MATLAB中断点调试入门到进阶
  20. Linux 编程之进程篇:调度、优先级、亲和性和资源限制

热门文章

  1. 联想笔记本任务栏不显示电量了
  2. 自动化测试遇到手机号验证码怎么办?
  3. 从“边界信任”到“零信任”,安全访问的“决胜局”正提前上演
  4. vue微信公众号页面分享
  5. 【Linux】Ubuntu kill 杀死进程详解
  6. jenkins配置qq邮箱服务器
  7. 《腹盆腔三维可视化系统的设计与实现》阅读
  8. input默认值,点击清除,离开恢复
  9. Centos7中grep,fgrep,pgrep的区别以及相关使用
  10. (python3)kaggle上matplotlib显示不了中文(title是框,坐标也是框)完全解决.md