概述:Subversion是一个自由/开源的版本控制系统,在subversion容许数据恢复到早期版本,支持检查数据修改的历史,容许和别人协作文档并跟踪所做的的修改。
subversion的工作原理:
subversion的内部结构:
sub 如果是本地就本地访问,如果不在一台就使用apache 和svnserver访问
在主机web1安装subversion服务器
[root@web1 ~]# yum -y install subversion -----安装软件
[root@web1 ~]# rpm -q subversion ----显示版本信息[root@web1 ~]# svnadmin create /var/svn/project -------仓库目录
[root@web1 ~]# ls /var/svn -----可以创建多个仓库
project project2
[root@web1 svn]# du -sh project ---查看仓库内存
100K project ----空仓库
[root@web1 svn]# cd /usr/lib/systemd/system -------起服务的配置文件
[root@web1 system]# svn import . file:///var/svn/project/ -m "Init Data" ----从本机的subversion仓库下载仓库信息
正在增加 runlevel0.target
正在增加 anaconda-sshd.service
提交后的版本为 1。
[root@web1 system]# cd /var/svn/ -----跳转到相应的仓库[root@web1 svn]# du -sh project
608K project -----不是明文
[root@web1 ~]# cd /var/svn/project/conf ----跳转到subversion的相应的配置文件目录
[root@web1 conf]# ls
authz passwd svnserve.conf ------使得客户运程访问的时候需要修改的三个配置文件
[root@web1 ~]# vim /var/svn/project/conf/svnserve.conf -----修改以下的配置信息
//修改19行,注意顶格,匿名无任何权限
anon-access = none
//修改20行,注意顶格,有效账户可写
auth-access = write
//修改27行,注意顶格,密码文件
password-db = passwd
//修改34行,注意顶格,ACL访问控制列表文件
authz-db = authz
[root@web1 ~]# vim /var/svn/project/conf/passwd ---在该配置文件下添加可以访问subversion的用户信息
在第6行的 [users]下添加可以访问svn的用户以及密码
harry = 123456
sally = 123456
[root@web1 ~]# vim /var/svn/project/conf/authz -----在该配置文件下设置控制信息
[/test]
tom=rw
* =
[/]
*=r
启动服务
[root@web1 ~]# svnserve -d -r /var/svn/project --共享给一个仓库
[root@web1 ~]# svnserve -d --共享所有仓库
如果要重新的启动服务的化,需要killall svnserver在启动服务
客户端访问测试
svn checkout svn://192.168.2.100 code 把svn的文件下载到文件code下,如果没有则创建了相应的文件夹,checkout可以简写成co
[root@web2 ~]# mkdir /zhu ----创建一个新的目录用于存放从subversion服务器的相应的库中下载的信息
[root@web2 ~]# cd /zhu ----跳转到相应的库
[root@web2 zhu]# yum -y install subversion ----安装subversion
[root@web2 zhu]# svn --username harry --password 123456 co svn://192.168.2.100 code ----从库中下载信息存在code
注意! 你的密码,对于认证域:
<svn://192.168.2.100:3690> 3997b70e-97cf-40c3-9724-13618347e4b1
只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。
你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?yes
[root@web2 zhu]# ls
code
[root@web2 zhu]cd code
测试:修改下载到本地的一个文件并上传,可以看到 Subversion已经把整个文件的版本改成了版本2
[root@web2 code]# vim zram.service ----更改相应的文件[root@web2 code]# vim virtlockd.service ----更改相应的文件
[root@web2 code]# svn ci -m "modify"
正在发送 virtlockd.service
正在发送 zram.service
传输文件数据..
提交后的版本为 2。
subversion应用举例
1.当从subversion库中下载下来的文件被误删除的时候,可以通过更新的命令恢复
[root@web2 code]# ls | wc -l
397
root@web2 code]# rm -rf *.socket
[root@web2 code]# ls | wc -l
377
[root@web2 code]# svn update
正在升级 '.':
已还原“virtlockd.socket”
....
已还原“lvm2-lvmpolld.socket”
版本 2。
[root@web2 code]# ls | wc -l
397
2.可以查看subversion库版本的信息
[root@web2 code]# svn info svn://192.168.2.100
路径: .
URL: svn://192.168.2.100
版本库根: svn://192.168.2.100
版本库 UUID: 3997b70e-97cf-40c3-9724-13618347e4b1
版本: 2
节点种类: 目录
最后修改的作者: harry
最后修改的版本: 2
最后修改的时间: 2018-07-14 13:25:42 +0800 (六, 2018-07-14)
2.可以查看subversion库版本的日志信息
[root@web2 code]# svn log svn://192.168.2.100
------------------------------------------------------------------------
r2 | harry | 2018-07-14 13:25:42 +0800 (六, 2018-07-14) | 1 行
modify
------------------------------------------------------------------------
r1 | root | 2018-07-14 08:54:34 +0800 (六, 2018-07-14) | 1 行
Init Data
------------------------------------------------------------------------
3.新建的文件默认不能提交,需要add添加后才可以把创建的文件信息上传到相应的文件
[root@web2 code]# echo "xxx" > test.sh
[root@web2 code]# ls test.sh
test.sh
[root@web2 code]# svn ci -m "xx"
[root@web2 code]# svn add test.sh
A test.sh
[root@web2 code]# svn ci -m "new shell file"
正在增加 test.sh
传输文件数据.
提交后的版本为 3。
4.新建目录
[root@web2 code]# svn mkdir test
A test
[root@web2 code]# svn ci -m "xx"
正在增加 test
提交后的版本为 4。
5.删目录,但是在之前的版本里面还会看到
[root@web2 code]# svn rm test.sh
D test.sh
[root@web2 code]# ls test.sh
ls: 无法访问test.sh: 没有那个文件或目录
[root@web2 code]# svn ci -m "yy"
正在删除 test.sh
提交后的版本为 5。
6.[root@web2 code]# svn --help 查看帮助
7.[root@web2 code]# svn diff -----查看本地的文件和服务器上的文件的区别
Index: umount.target
===================================================================
--- umount.target (版本 2)
+++ umount.target (工作副本)
@@ -1,5 +1,5 @@
# This file is part of systemd.
-#
+ksljdkshfjkdshfj#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
[root@web2 code]# svn cat svn://192.168.2.100:/umount.target 查看服务器文件的内容
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Unmount All Filesystems
Documentation=man:systemd.special(7)
DefaultDependencies=no
RefuseManualStart=yes
8.本地删除文件与svn恢复
[root@web2 code]# sed -i 'd' tmp.mount
[root@web2 code]# cat tmp.mount
[root@web2 code]# svn revert tmp.mount
已恢复“tmp.mount”
[root@web2 code]# wc -l tmp.mount
26 tmp.mount
9.还原到相关的版本
[root@web2 code]# sed -i '1a #test#' tuned.service
[root@web2 code]# head -3 tuned.service
[Unit]
#test#
Description=Dynamic System Tuning Daemon
[root@web2 code]# svn ci -m "xx"
正在发送 tuned.service
正在发送 umount.target
传输文件数据..
提交后的版本为 6。
[root@web2 code]# svn merge -r5
svn: E205001: 请使用 “svn help” 以得到更多信息
svn: E205001: 需要合并源
[root@web2 code]# svn merge -r6:2 tuned.service
--- 正在反向合并 r6,经由 r3,到 “tuned.service”:
U tuned.service
--- 记录反向合并 r6,经由 r3,到“tuned.service”的信息:
U tuned.service
--- 正在从 'tuned.s
10.恢复到原来的版本-r可以指定到相应的版本
[root@web2 zhu]# svn -r1 co svn://192.168.2.100 abc
A abc/system.slice
A abc/local-fs.target.wants/rhel-import-state.service
取出版本 1。
[root@web2 zhu]# ls
abc code