1 同事直接访问SVN服务器根目录。
2 根目录下按照各个部门创建不同的文件夹
3 只能看到对应部门的文件夹。其他部门的文件不可见
2.1 yum安装。
yum -y install svn
mkdir /var/svn
svnadmin create /var/svn/test
对应目录下会生成如下目录
svn#外表看和普通目录其实是一样的# ls
test
test # ls #如下是自动生成的目录
conf db format hooks locks README.txt
配置文件
2.3 修改svnserver
vi svnserve.conf
anon-access = none #为了安全起见,匿名用户不给权限
auth-access = write #认证用户可写
password-db = passwd #使用passwd文件做用户文件
authz-db = authz #使用authz作为鉴权文件
realm = /var/svn/test #根目录位置。 # 其实感觉这个参数 作用不大。
2.4 创建用户
vi passwd
kaifa = 123qwe
ceshi = 123qwe
yunwei = 123qwe
guanli = 123qwe
# 用户名 = 密码
2.5 授权
vi authz
groups
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
kaifa = kaifa
yunwei = yunwei
ceshi = ceshi
guanli = guanli
#组名 = 成员。 用逗号隔开
## 文件最下
/
@kaifa = rw #@组名 给组授权
@ceshi = rw
yunwei = rw #单用户授权, 每行一个
guanli = rw
启动服务
svnserve -d -r /var/svn/test/
ps -ef|grep svn
root 6427 1 0 23:53 ? 00:00:00 svnserve -d -r /var/svn/test/
root 6429 5240 0 23:53 pts/0 00:00:00 grep --color=auto svn
网盘下载地址
链接:https://pan.baidu.com/s/1DdUwkQmohPg73kh9I2VNog
提取码:qwer
--来自百度网盘超级会员V4的分享
LanguagePack_1.13.1.28686-x64-zh_CN.msi #汉化包
TortoiseSVN-1.13.1.28686-x64-svn-1.13.0 #客户端
官网下载地址
往下拖
按照步骤就略过了。 按照提示一步一步确定即可。
两个都安装完成后
右键会多出如下两个按钮
点击设置/setting 选择中文即可。
4. svn检出右键 svn检出
版本库: 填写svn://ip 即可
检出目录也可以自定义
svn 默认使用的是 3690端口。
左下角的保存认证记得别勾选, 不然测试起来很麻烦。
输入任意一个用户名和密码登录即可
此时桌面上会生成一个ipt同名的文件夹,里面内容如下
创建如下几个目录
中文文件夹需要linux服务端 支持中文, 若安装系统时没有勾选中文则参考
字符集更改
创建完成后,右键 svn提交
点击全选。点击确定,
弹出的框框再次输入用户密码。若第一步选择了记住,则本次就不用输入了
这次也还是不记住
即提交完成。
5. 服务端权限vi authz
/
* = r #根目录给读的权限。不然下面的目录别人无法看见。但不能给写,防止成员任意在根目录下创建目录
/运维
yunwei = rw #相关组和用户即给读写的权限
* = #* = 代表其他用户没有任何权限。这个必须存在,不然其他用户可以看到属于该部门的内容
/开发
@kaifa = rw
* =
/测试
@ceshi = rw
* =
/管理
guanli = rw
* =
权限修改完后,即时生效,不需要重启服务
6. 重新测试删除刚刚检出的目录
重新检出。 使用开发账户登录。 仍然选择不记住
仅可查看开发对应的目录
尝试在根目录下创建一个文件夹,并提交
使用开发账户登录。 仍然选择不记住
会提示 提交失败。权限拒绝
此时我们删除根目录下的该文件。并进入开发目录创建文件夹
再次提交,即可成功
此时领导的需求即已经完成。
7. 小提示- svn更新,是用来同步其他同事更新的内容,即相当于拉取了当前服务器内最新状态的库
- 当你从windows端拉取一个文件到svn目录时,windows端的该文件会消失,所以请复制进去。
- svn修改配置后无需重启,即可生效
上面写的内容是在一个版本库下创建多个子目录来实现需求。同时也可以同时使用多个版本库的功能。
修改配置
vi svnserve.conf
realm = /var/svn #将根目录指到 版本库的上层目录
创建别的版本库
root@k8s-vip svn # pwd
/var/svn
root@k8s-vip svn # svnadmin create 运维
root@k8s-vip svn # svnadmin create 开发
root@k8s-vip svn # svnadmin create 测试
root@k8s-vip svn # svnadmin create 管理
root@k8s-vip svn # ls
test 测试 管理 开发 运维
修改几个新版本库的svnserver的如下内容
anon-access = none
auth-access = write
password-db = ../../passwd
authz-db = ../../authz #指定为/var/svn/下的两个配置。
将test目录下的passwd authz拷贝到 /var/svn/目录下。并进行如下修改
vi authz
/ #根目录不给任何权限了
* =
运维:/ #运维即版本库名 :/ 为啥这么写 我也不知道 。反正这么就能实现
yunwei = rw
* =
开发:/
@kaifa = rw
* =
测试:/
@ceshi = rw
* =
管理:/
guanli = rw
* =
重启服务
这个因为修改了跟目录。而我们启动时指的是另一个目录,所以得重启
ps -ef|grep svn
kill pid
svnserve -d -r /var/svn/
客户端检出时,也发生了点变化。
删除原来的,重新检出即可。
9. svn结合ldap参考
10. 备份官方有三种备份方式
svnadmin dump
svnadmin hotcopy
svnsync
10.1 svnadmin hotcopy
svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份;
优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。
缺点是:比较耗费硬盘,需要有较大的硬盘支持
以第一种方法为实验背景
运维库为标准
创建了一个test1。 并提交
创建一个备份。
svn# svnadmin hotcopy test test.bak
svn # ls
test test.bak
回到windows,将test1目录删掉。并提交
进行恢复
svn# rm -rf test
svn # svnadmin hotcopy test.bak test
回到windows。进行svn更新
test1 回来了
创建脚本。配合计划任务实现自动备份
我这边根据领导的安排,是不在本地保存,统一备份到备份服务器。
vi svn-bak.sh
svnadmin hotcopy /var/svn/test /var/svn/test.bak
cd /var/svn/
tarbao=test.bak.`date +%Y%m%d`tar.gz
tar zcf $tarbao test.bak
rsync $tarbao root@192.168.50.30:/opt/svn/
rm -rf test.bak $tarbao
可以搭配邮件服务器。发送成功后,邮件通知结果。 公司内部由于部分原因,就不采用该方式了。固定上班以后手动看下。(反正就算发了邮件 也得看看备份结果)
结合计划任务。实现每晚3点进行备份
crontab -e
* 3 */1 * * bash /var/svn/svn-bak.sh > /dev/null 2>&1
这是我用的法子。备份时无需额外备份配置文件。
恢复需要重新检出
10.2 svnadmin dump
svnadmin dump是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。
缺点是:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。
且 这种方法不会备份conf文件
个人建议在版本数比较小的情况下使用这种备份方式。
同样的方法进行测试。
当前是有test1文件夹的。
查看当前的版本号
svn#test 为版本库名称# svnlook youngest test
2
创建一个完整备份
svn#前为版本库,后为备份# svnadmin dump test > test.bak
* 已转存版本 0。
* 已转存版本 1。
* 已转存版本 2。
windows端删除test1.并提交
然后进行恢复
svn# svnlook youngest test 此时为版本3
3
将conf文件进行备份
cp -r test/conf .
恢复时,需要先删除原本的版本库,并创建一个新的。 不然恢复无用。
rm -rf test
svnadmin create test
svnadmin load test < test.bak
<<< 开始新的事务,基于原始版本 1
* 正在增加路径 开发 ...完成。
* 正在增加路径 测试 ...完成。
* 正在增加路径 管理 ...完成。
* 正在增加路径 运维 ...完成。
------- 提交后版本 1 >>>
<<< 开始新的事务,基于原始版本 2
* 正在增加路径 运维/test1 ...完成。
------- 提交后版本 2 >>>
然后删除 新版本库中的conf。目录。并把我们备份的conf复制进去
rm -rf test/conf/
cp -r conf/ test/
10.3 备份总结
他的增量备份,玩儿不明白。所以我选择用了svnadmin hotcopy.
而且svnadmin dump 不备份conf文件。恢复时不太方便。且每次更改权限还需要额外备份conf,所以不用他。
11. 选择对于该需求来说,两种方法则各有利弊。
单项目多子目录:
- 优点:方便管理,且成员使用时,只需要连接svn服务器即可,无需指定目录
- 缺点:若某一个子目录的用户误删重要文件,且他人无备份时,若想恢复,则需全部子目录都恢复上个版本。 但 可以通过hotcopy的文件,额外开个SVN出来供恢复使用,然后重新提交至主线
多个项目:
- 优点:多个项目目录各自互相不影响,备份恢复比较灵活
- 缺点:成员使用时,需要在ip地址后额外指定项目名称,