如何部署基于SVN+SSH协议的Subversion?

Subversion

1 前言

1.1 需求和目的

公司要求引入版本管理服务器对两大对象进行管理:
1)针对windows环境的开发人员的源代码做版本控制。
2)针对linux服务器的配置文件做版本控制。
本章将使用svn+ssh协议的方式完成文件的版本控制。

1.2 系统架构模式描述

1)linux的服务器端
服务器端通过ssh协议提供版本控制服务(port:tcp22)
2)linux&windows的客户端
linux以配置文件版本控制客户端的角色出现
windows以开发者版本控制客户端的角色出现

2、理论部分

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。

3 实践部分

3.1 主机信息

svnSer:
ipaddress=10.168.0.176
hostname=svnSer

linux client:
ipaddress=10.168.0.8
hsotname=client

windows Client:
ipaddress=10.168.0.x
hostname=will2

3.2 yum包的安装

In svnSer & Linux Client

yum -y install subversion

其他包安装:

yum -y install tree

3.3 linux服务端、客户端的配置

3.3.1 step1

In svnSer:
定义仓库文件夹:

svnadmin create /var/local/svn
ls /var/local/svn
tree /var/local/svn

注意”revprops”节点(版本控制内容)

3.3.2 step2

In svnSer:
定义权限控制

ll /var/local/svn
groupadd -g 5000 svngroup
chgrp -R svngroup /var/local/svn
ll /var/local/svn/db/
chmod g+w -R /var/local/svn/db/
chmod o= -R /var/local/svn/db/
ll /var/local/svn/db/

定义只有svngroup组对“/var/local/svn/db/”有写的权限,其他用户没有任何权限

3.3.3 step3

In svnSer:
定义svn用户

useradd stan
echo willp | passwd --stdin will
useradd natasha
echo natashap | passwd --stdin natasha
usermod -G svngroup will
usermod -G svngroup natasha
#usermod -aG svngroup will
#usermod -aG svngroup natasha
id will
id natasha

3.3.4 step4

In svnSer:
检查文件目录权限

ll -d /var/local/svn

确认组只有读权限

ll -d /var/local/svn/db

确认组有读写权限

ll /var/local/svn/db/

确认文件有读写权限

3.3.5 step5

In svnSer:
上传文件测试
1)配置需要的环境变量:

su - will
vim ~/.bashrc

输入如下内容:

export EDITOR=vi

2)创建测试源:

cp -r /etc/ /home/will/
tree /home/will/etc
cd /home/will/
svn import etc/ file:///var/local/svn/etc

输入:

i
import svn etc v1
#ESC键
:wq

3.3.6 step6

In svnSer:
下载测试

rm -rf etc/
svn checkout file:///var/local/svn/etc
tree etc/

3.3.7 step7

In Client:
建立测试用户并配置环境变量

useradd will
useradd natasha
echo willpw | passwd --stdin will
echo natashapw | passwd --stdin natasha

配置需要的环境变量:

su - will
vim ~/.bashrc

输入如下内容:

export EDITOR=vi
cd /home/will/
svn checkout svn+ssh://10.168.0.176/var/local/svn/etc

输入svnSer服务器端will的用户密码(注意不是本机的will用户密码)

3.3.8 step1

In Client:
检查下载的文件

tree /home/will/etc

3.3.9 step9

In Client:
设置自动认证
1)ssh-keygen生成一对秘钥

ssh-keygen

以上一直回车就好
2)把公钥复制给svnSer

ssh-copy-id -i ~/.ssh/id_rsa.pub will@10.168.0.176

输入svnSer服务器端stan的用户密码(注意不是本机的stan用户密码)
3)测试自动认证

cd /home/will/
rm -rf etc
ls
svn checkout svn+ssh://10.168.0.176/var/local/svn/etc

3.3.10 step10

In svnSer
版本信息更新测试
1)新svn文件

vim /home/will/etc/sysconfig/network

更改前:

HOSTNAME=svn.cmdschool.org

更改后:

HOSTNAME=svn001.cmdschool.org

更改以上参数
2)上传svn文件

cd /home/will/etc
svn commit

输入:

i
modify network
#ESC键
:wq

3.3.11 step11

In Client
客户端下载svn文件
1)先检查客户端配置文件

cat /home/will/etc/sysconfig/network

2)更新svn文件

cd /home/will/etc
svn update

3)检查svn更新结果

cat /home/will/etc/sysconfig/network

3.3.12 step12

In Client
客户端下载某个版本的svn文件
1)清理当前的svn文件

cd ..
rm -rf etc

2)检出选定的版本svn文件

svn checkout -r 1 svn+ssh://10.168.0.176/var/local/svn/etc

以上检出版本1的文件

3.3.13 step13

In Client
客户端svn文件更新
增加一个新文件

echo "test" > /home/will/etc/test.txt

3)上传新文件

svn add /home/will/etc/test.txt
cd /home/will/etc/
svn commit

输入:

i
Client add file to svnSer
#ESC键
:wq

3.3.14 step14

In svnSer
svn文件删除
1)svn文件的删除

svn del /home/will/etc/test.txt
svn commit

输入:

i
del test.txt file
#ESC键
:wq

In Client
2)客户端检出删除的结果

svn update
ls /home/will/etc/test.txt

3.3.15 step16

In svnSer
svn文件重命名
1)重命名

cd /home/will/etc/sysconfig/
svn mv network network.save
svn commit

输入:

i
mv filename
#ESC键
:wq

In Client
2)客户端检出重命名的结果

svn update
ls /home/will/etc/sysconfig/network.save

3)svn版本回滚

svn update -r 3
svn commit

以上回滚到第3版本

3.3.16 step16

简化日志输入

svn update -r 4
svn commit -m "r to v4"

3.3.17 step17

svn日志查看

svn log

3.4 windows客户端的配置

3.4.1 step1

In window Client:
设置公钥认证:
1)下载putty
http://the.earth.li/~sgtatham/putty/latest/x86/putty.zip
解压到D盘根目录:

2)生成公钥和私钥

注:以上需要在界面上移动鼠标(笔者超级奇怪,刚才是没有看清楚!)
3)保存公钥和私钥到“d:\putty”

保存结果如下:

3.4.2 step2

测试公钥认证:
In window Client:
1)把公钥复制到服务器端:

2)设置认证的公钥:
IN svnSer:
执行如下命令将公钥加入到认证文件:

cat /home/will/pubkey >> /home/will/.ssh/authorized_keys
vim /home/will/.ssh/authorized_keys

编辑前:

以上光标处开始共9行,保留第3-8行,其余删除,并将3-8行合并为一行。
编辑后:

以上加入头部“ssh-rsa”与尾部客户“用户名@主机名”即“will@will2.comschool.org”
注:以上加入公钥方法本人觉得麻烦,windows到linux有更好的方法请告知我!
3)添加认证所需的私钥
In windows Client:

4)设置测试信息
In windows Client:

见到如下信息表示公钥认证成功:

3.4.3 step3

In windows Client:
下载并安装svn
1)下载并安装
下载地址:
http://tortoisesvn.net/downloads.html
由于windowsn的安装都是无师自通,本教程省略,安装完成图例如下:

文件夹邮件菜单图例:

以上两张图证明svn安装成功

3.4.4 step4

设置svn认证:
右键单击要检出到的文件夹->TortoiseSVN -> Settings -> Network
1)样例一
公钥认证
并添加如下公钥认证样例:

"C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe" -l will -i D:\putty\privatekey.ppk

详细如下:

常用参数:
-pw 输入登录svn服务器的密码
-l 输入登录svn服务器的用户名
-i 输入认证的私钥
2)样例二
公钥认证显式用户名和密码自动登录样例(不安全):

"C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe" -pw password -l username

3)样例三
手动键入密码的样例(太麻烦):

"C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe" -l username

3.4.5 step5

检出记录

如上图所示:
文件夹单击[SVN Checout]
填入检出路径:”svn+ssh://will@10.168.0.176/var/local/svn/etc”
以上内容意义:
协议:svn+ssh://
用户名:will
路径:10.168.0.176/var/local/svn/etc

如上图所示:
文件检出中……
———————————————————-
参阅资料:
yum安装方法:
http://subversion.apache.org/packages.html#centos
putty下载地址:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
windows与服务器的通讯设置:
http://wenku.baidu.com/link?url=Awhja8vSOiH5_1yNC15p6yfmsQ0ZqQYp8s1avx7rAR71jaX0YHgQQgRFc82IViuXgioyzTtfXp5PTeDnSrtGu1ceRTUuRn1GtCxPOPxnkAu
svn权限控制:
http://blog.csdn.net/jenminzhang/article/details/8665612
认证失败的解决方案:
http://blog.sina.com.cn/s/blog_4b93170a0100leb2.html
apache mod_dav_svn的使用方法:
http://www.uml.org.cn/pzgl/200908078.asp
备份和迁移:
http://www.iitshare.com/linux-svn-migration.html

没有评论

发表回复

Highly available
如何部署Subversion的双机热备?

1 前言 笔者公司需要一台svn服务器,但不幸的是公司给了一台破旧的服务器(本地用的,其他服务都跑在 …

Subversion
如何部署基于SVN协议的Subversion?

1 前言 1.1 需求和目的 公司要求引入版本管理服务器对两大对象进行管理: 1)针对windows …