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
1
|
yum -y
install
subversion
|
其他包安装:
1
|
yum -y
install
tree
|
3.3、linux服务端、客户端的配置
3.3.1、step1
In svnSer:
定义仓库文件夹:
1
2
3
|
svnadmin create
/var/local/svn
ls
/var/local/svn
tree
/var/local/svn
|
注意"revprops"节点(版本控制内容)
3.3.2、step2
In svnSer:
定义权限控制
1
2
3
4
5
6
7
|
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用户
1
2
3
4
5
6
7
8
9
10
|
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:
检查文件目录权限
1
|
ll -d
/var/local/svn
|
确认组只有读权限
1
|
ll -d
/var/local/svn/db
|
确认组有读写权限
1
|
ll
/var/local/svn/db/
|
确认文件有读写权限
3.3.5、step5
In svnSer:
上传文件测试
1)配置需要的环境变量:
1
2
|
su
- will
vim ~/.bashrc
|
输入如下内容:
1
|
export
EDITOR=
vi
|
2)创建测试源:
1
2
3
4
|
cp
-r
/etc/
/home/will/
tree
/home/will/etc
cd
/home/will/
svn
import
etc/
file
:
///var/local/svn/etc
|
输入:
1
2
3
4
|
i
import
svn etc v1
#ESC键
:wq
|
3.3.6、step6
In svnSer:
下载测试
1
2
3
|
rm
-rf etc/
svn checkout
file
:
///var/local/svn/etc
tree etc/
|
3.3.7、step7
In Client:
建立测试用户并配置环境变量
1
2
3
4
|
useradd
will
useradd
natasha
echo
willpw |
passwd
--stdin will
echo
natashapw |
passwd
--stdin natasha
|
配置需要的环境变量:
1
2
|
su
- will
vim ~/.bashrc
|
输入如下内容:
1
2
3
|
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:
检查下载的文件
1
|
tree
/home/will/etc
|
3.3.9、step9
In Client:
设置自动认证
1)ssh-keygen生成一对秘钥
1
|
ssh
-keygen
|
以上一直回车就好
2)把公钥复制给svnSer
1
|
ssh-copy-id -i ~/.ssh/id_rsa.pub will@
10.168
.
0.176
|
输入svnSer服务器端stan的用户密码(注意不是本机的stan用户密码)
3)测试自动认证
1
2
3
4
|
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
更改前:
1
|
HOSTNAME=svn.cmdschool.org
|
更改后:
1
|
HOSTNAME=svn001.cmdschool.org
|
更改以上参数
2)上传svn文件
1
2
|
cd
/home/will/etc
svn commit
|
输入:
1
2
3
4
|
i
modify network
#ESC键
:wq
|
3.3.11、step11
In Client
客户端下载svn文件
1)先检查客户端配置文件
1
|
cat
/home/will/etc/sysconfig/network
|
2)更新svn文件
1
2
|
cd
/home/will/etc
svn update
|
3)检查svn更新结果
1
|
cat
/home/will/etc/sysconfig/network
|
3.3.12、step12
In Client
客户端下载某个版本的svn文件
1)清理当前的svn文件
1
2
|
cd
..
rm
-rf etc
|
2)检出选定的版本svn文件
1
|
svn checkout -r 1 svn+
ssh
:
//10
.168.0.176
/var/local/svn/etc
|
以上检出版本1的文件
3.3.13、step13
In Client
客户端svn文件更新
增加一个新文件
1
|
echo
"test"
>
/home/will/etc/test
.txt
|
3)上传新文件
1
2
3
|
svn add
/home/will/etc/test
.txt
cd
/home/will/etc/
svn commit
|
输入:
1
2
3
4
|
i
Client add
file
to svnSer
#ESC键
:wq
|
3.3.14、step14
In svnSer
svn文件删除
1)svn文件的删除
1
2
|
svn del
/home/will/etc/test
.txt
svn commit
|
输入:
1
2
3
4
|
i
del
test
.txt
file
#ESC键
:wq
|
In Client
2)客户端检出删除的结果
1
2
|
svn update
ls
/home/will/etc/test
.txt
|
3.3.15、step16
In svnSer
svn文件重命名
1)重命名
1
2
3
|
cd
/home/will/etc/sysconfig/
svn
mv
network network.save
svn commit
|
输入:
1
2
3
4
|
i
mv
filename
#ESC键
:wq
|
In Client
2)客户端检出重命名的结果
1
2
|
svn update
ls
/home/will/etc/sysconfig/network
.save
|
3)svn版本回滚
1
2
|
svn update -r 3
svn commit
|
以上回滚到第3版本
3.3.16、step16
简化日志输入
1
2
|
svn update -r 4
svn commit -m
"r to v4"
|
3.3.17、step17
svn日志查看
1
|
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:
执行如下命令将公钥加入到认证文件:
1
|
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)样例一
公钥认证
并添加如下公钥认证样例:
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)样例三
手动键入密码的样例(太麻烦):
1
|
"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
如上图所示:
文件检出中……