svn_subversion版本控制协议

subversion的最新版本可以去Apache的网站上去寻找。
 
svn服务器的搭建:
svn这个软件安装完成以后,我们的创建一个版本库,svnadmin工具是subversion软件所提供的版本库管理工具,该工具可以用来创建库,备份库,修订版本等操作。
其次为了加强我们版本库的安全性,我们可以对我们版本库进行一些安全性的认证机制,
服务端软件安装设置完成以后启动相应的进程就可以了。
 
创建服务器的版本库:
利用svnadmin命令可创建服务器版本库,该命令和用法如下:
svnadmin   命令     版本库的路径
命令:
create      创建一个新的版本库
hotcopy 版本库热备
lslocks 打印所有的锁描述。
 
实例:
>>>svnadmin   create    /var/svn/project
>>>svnadmin hotcopy /var/svn/project /var/svn/project_1
>>>svnadmin lsblock /var/svn/project
 
情景再现:
我们公司刚刚接到一个网站项目,由于开发人数众多,所以公司希望使用版本控制系统高效低管理项目代码,项目代码被保存到/var/web_code这个目录下面,下面我们将为该项目创建名为web_project的版本库。
>>>mkdir  /var/svn
>>>svnadmin create /var/svn/web_project
现在先创建一个新的空的版本控制系统,
我们使用import命令,将我们执行的代码导入到我们我们的本地的代码目录下面,
 
>>> svn import /var/svn/passwd file:///var/svn/passwd -m"users"
增加           /var/svn/passwd
 
提交后的版本为 1。
>>> svn list file:///var/svn/
passwd
>>> svn list file:///var/svn/passwd
passwd
 
 
 
配置文件的修改:
这个是主配置文件subversion.conf
anon-access = read
#这个设置的是匿名用户的访问的方式,read只读,none是拒绝。
auth-access = write
#经过认证的用户是可以有写的操作的。
password-db = passwd
#这个是用来指定账户名称与密码的存放文件名,该文件在conf这个目录的外面
authz-db = authz
#指定基于路径的访问控制文件名(可以对文件或目录设置权限)
realm = My First Repository
#设置的是版本库的域,如果两个版本库的域相同,他们将使用相同的密码数据。
 
我们在来修改passwd这个文件。[这个文件也是存放在conf那个目录的里面]
[users]
harry = harryssecret
sally = sallyssecret
#这个设置的是用户名和密码,等号左边是名,右边是密码。
 
修改authz这个文件
[groups]
admins = harry,sally
#定义组,组成员有harry和sally这两个用户。
 
[/]
#对版本库的根路径进行设置,可以设置为需要控制的路径。
@admins = rw
#admins组中的用户可读,可写权限
* = r
#定义其他的人只有可读的权限,无权限设置为(‘’)
#读写(‘rw’)
 
启动 svnserver服务。
svnserver     -d   以守护进程的方式运行svnserver。
--listen-port=port 指定监听的端口,默认的监听的端口号是3690
-r root  为版本库指定一个虚拟的路径,默认客户端要指定绝对路径访问库。
 
>>>svnserve -d
查看运行的状态:
>>>lsof -i:3690
 
>>>svnserve -d -r /var/svn
 
客户端的访问,
file:/// 直接访问本地磁盘上的版本库(客户端与服务器端在同一一台电脑上)
http:// 配置Apache的webdav协议,通过网页访问版本库
https:// 与http://类似,但是使用了ssl来加密。
svn:// 通过svnserve定义的协议访问版本库
svn+ssh:// 与svn相似,但是使用了ssh封装加密数据
 
svn命令
描述:subversion 客户端命令行功具。
选项:--password 密码
    --usename 用户名
    --revision(-r) 指定要检查的特定版本。
命令:add    添加文件,目录或符号链接
    cat 输出特定文件的内容
checkout     url@rev【path】
从服务器版本库中复制一份副本至本地,url定位版本库,通过rev可以瞎子特定版本的数据,path为本地工作副本的路径。
commit   将本地工作副本修改后的内容发布到版本中,简写为ci
copy  src   dst    将工作副本中的一个文件或目录复制至版本库
delete    path  从本地工作副本中删除一个项目
delete   url 从版本库中删除一个项目
diff 对比两个版本之间的差别
import 提交一个路径的副本至版本库
info 显示本地货远程版本信息
 
实验:
svn checkout file:///var/svn/ mine
这个是在本机上取出我们需要版本库。并且给这个版本命个名,叫做mine
svn co svn://192.168.157.2/var/svn heihei
这个是在远程上取出我们需要的版本库,并且给这个版本命名为heihei
svn import -m "disnaci " shadow file:///var/svn/password/
这个是提交给本地版本库一个自己的文件。
svn info svn://192.168.157.2/var/svn/
路径: svn
URL: svn://192.168.157.2/var/svn
版本库根: svn://192.168.157.2/var/svn
版本库 UUID: 53b6c065-5094-42c3-9818-02013a4f5c50
版本: 2
节点种类: 目录
最后修改的作者: root
最后修改的版本: 2
最后修改的时间: 2017-08-29 14:42:23 +0800 (二, 2017-08-29)
 
svnlook命令
描述:这个是svn的检查工具,我们可以通过svnlook help来查看命令帮助。
用法  svnlook命令 版本库路径【选项】
命令:
author 显示作者
cat 显示版本库中文件的内容
date 显示时间标记
log 显示日志消息
tree 显示版本库资料树
svnlook实例:
>>>svnlook author /var/svn/
>>>svnlook author -r 1 /var/svn/
>>>svnlook author -r 2 /var/svn/
>>>svnlook author -r 2 /var/svn/ passwd
上面的这些例子,显示的是给我们我们第一个版本的作者,以及我们第二个版本的作者,第三个是我们这个版本库中文件的作者是谁。
 
svn+ssh服务器的搭建。
服务器端:
>>>service  sshd start
这个是将我们需要的ssh服务启动起来。
>>>chkconfig sshd on
把这个服务设置成永久启动
>>> echo "nidaye de zhenfan " > file
先新建立一个我们需要的文件。
>>>svn import file file:///var/svn/project/project_11/ -m "web_code"
将我们需要的文件提交到我们svn 的版本库中。
>>>
客户端:
>>> svn co svn+ssh://192.168.157.2/var/svn/project /project
这个是将我们远程的这个版本库里面的文件夹存放到我们本地的/project这个目录里面。这里值得注意的是,我们的版本库必须是一个目录,存放文件的上一级的目录,而不是当前指向的那个文件。
 
Apache+svn服务器的搭建
这样的好处是可以使用Apache的多种认证的机制。
不需要创建系统的账户
Apache提供了完善的日志功能。
可以通过tls进行数据的加密
http以及https可以穿越企业的防火墙
客户端简单的通过浏览器访问版本库
 
>>>svn import file file:///var/svn/project/project_11/ -m "web_code"
在服务器上创建我们的版本库,并且将我们的新的文件提交到我们的版本库中。
>>>yum install -y httpd
安装我们的Apache服务
>>>yum install -y mod_dav_svn
安装我们的Apache需要的svn模块。
 
#############################################
>>>vim /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module     modules/mod_dav_svn.so
#这个是加载我们的dav_svn模块
LoadModule authz_svn_module   modules/mod_authz_svn.so
#这个是加载权限的设置模块
#除了这两个模块我们还需要确保/etc/httpd/conf/httpd.conf文件中dav_module模块也会被加载
a) readable and writable by the 'apache' user, and
#默认Apache的启动用户为Apache,所以需要Apache用户对版本库有读写的权限。
 
 
#   b) labelled with the 'httpd_sys_content_t' context if using
#   SELinux
#如果开启了selinxu,则版本库目录需要有http_sys_content_t 安全上下文的标签
###################################################
<Location /svn>
#当用户调用URL是以svn开始(http://hostname/svn/...),Apache会将控制权交给DAV这个模块处理
DAV svn
SVNParentPath /var/svn
#通过SVNParentPath制定所有的版本库的主目录(发布所有的版本库)
#也可以通过SVNParentPath制定某个特定的版本库的路径(打不特定的版本)
#   # Limit write permission to list of valid users.
#   <LimitExcept GET PROPFIND OPTIONS REPORT>
#      # Require SSL connection for password protection.
#      # SSLRequireSSL
#
      AuthType Basic
#Apache认证方式
      AuthName "Please input password"
#提示字符
      AuthUserFile /var/svn/.pass
#账户的文件路径,为了安全,应隐藏该文件
      Require valid-user
#这个设置的是仅为有效用户可以访问
#   </LimitExcept>
</Location>
################################################
服务器端的操作:
>>>  chown -R apache.apache /var/svn
#给咱们这个目录一个Apache的权限,让Apache有权限来访问我们svn的目录
>>> chcon -R -t http_sys_content_t /var/svn
#这个是selinux开启之后,才用到的命令,在咱们修改配置文件的时候也可以看到这段。
>>>  htpasswd -c /var/svn/.pass jerry
#这个是给咱们的用户重新设置一个密码的。
>>>  service httpd restart
#重启Apache,让咱们的服务生效
>>>  chkconfig httpd on
#让Apache永久启动。
 
客户端
直接在浏览器端使用,http://IP/svn/project   这样访问就可可以了。
 
 
mkdir /opt/svn
mkdir  shell
mkdir {a..c}1
svnadmin create /opt/svn
posted @ 2018-05-04 20:50  零0零  阅读(241)  评论(0编辑  收藏  举报