svn 使用配置详解

基本上用了一年的svn了,但是因为自己不是队长,所以一直没有去自己搭建和研究一下,这里花了几天的时间研究了一下,下面是我的总结,我会尽量详细,因为我以前写博客也是乱来,只记录的让自己看的懂就可以,但是这次想认真写一下,尽量清晰一点。到时候我会把这些包的打包好放到我自己的百度网盘里面,给大家下载。

架构:

我们先来了解一下svn的架构,看了架构图对我们的配置是很有帮助的。
![svn架构图](https://img-blog.csdn.net/20151007170552579)

svnserve方式配置

安装

1.安装subversion包的一些依赖包

sudo tar -zxvf apr-1.4.5.tar.gz
cd apr-1.4.5/
sudo ./configure --prefix=/usr/local/apr
sudo make -j 2
sudo make install

就这样apr包安装好了,接下来安装apr-util,scons,serf,sqlite-amalgamation-3071501

sudo tar -zxvf apr-util-1.3.8.tar.gz
cd apr-util-1.3.8/
sudo ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
sudo make && make install

这样apr-util包就安装好了

接下来我们安装scons这个包,这个包是python的自动化构建工具,因为接下来的serf这个包需要用到,所以要安装scons这个包,这是是在svn+apache的时候才需要安装这两个包。

sudo tar -zxvf scons-2.3.6.tar.gz 
cd scons-2.3.6
sudo python setup.py install

这样scons自动化构建工具就安装好了,现在我们可以利用这个工具去安装serf了

sudo tar -zxvf serf-1.3.8.tar.gz
cd serf-1.3.8
sudo scons PREFIX=/usr/local/serf APR=/usr/local/apr APU=/usr/local/
sudo scons install

准备工作就做好了,当然如果还有一些其他的依赖没有安装,那就安装上吧。下面开始安装subversion包了

./autogen.sh #先运行这个shell脚本,来检测必要的软件包
sudo ./configure --prefix=/usr/local/subversion --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-sqlite=/usr/local/sqlite-amalgamation

如果是用svnserve服务运行,这样就可以了,svnversion就安装好了,下面就进入配置阶段了。

配置

1.创建名称为project1的版本库

sudo mkdir -p /var/svn_repo
cd /var/svn_repo
svnadmin create project1

2.启动服务

svnserve -d -r /var/svn_repo#记住这里的路径是版本库的根目录如果我们要访问
#的话svn://127.0.0.1/project1,和网站根目录是一样的。
  1. 此时可以直接访问svn了,但是还没有什么权限限制,我们建立一个svn_client
sudo mkdir svn_client
cd svn_client
svn checkout svn://127.0.0.1/project1#这样就把这个项目checkout出来了,此时是一个空项目,我们可以建立我们的目录了
4.建立客户端目录
svn手册中推荐我们的工作目录结构时这样的
project1
trunck
branches
tags

trunck是开发的主分支,我们每个人在branches分支上开发,最后都合并到trunck分支上来,tags是为了发布一些特定版本用的。这样一下就明了这样的布局了,也许我们工作当中并不会接触到这些类似规范的东西,但是如果你是架构师,你是项目主管,这些必须了如指掌。

下面介绍这三个目录在我们实际工作当中是怎样的,又是怎样来合并分支到主干分支的:
假如我们建立了这三个目录trunk,branches,tags
我们在trunck中建立了一个文件i.php

svn add i.php
svn commit i.php -m 'this is i.php'

这样就把i.php提交到了svn的版本库中,假设现在项目已经开发到一定的阶段了,需要增加一个功能,我们就需要开一个分支来开发了,然后把这个分支合并会trunk中

svn copy svn://127.0.0.1/trunk   svn://127.0.0.1/branches/branche_1 -m 'create a branche'#这样便创建了一个分支,我们到branches文件夹checkout出来
cd branches
svn checkout svn://127.0.0.1/branches/branche_1

分支出来后,我们就在分支下面开发了,假如我在分支下面添加了一个hello.php文件

svn add hello.php
svn commit hello.php -m 'add a php file'

分支的功能开发好了,接下来我们就需要合并回trunck中。在svn合并的原则就是diff+apply 意思是,先把分支的开发中产生的差异找出来,再应用到trunk分支上,下面看看操作

cd trunck
获取branche_1最初copy的版本号
svn log –stop-on-copy svn://127.0.0.1/project1/branches/branche_1#来获取branche_1分支最初copy时的版本,和当前进行到的版本diff再应用到.当前文件夹也就是trunk中,这样就达到了合并的目的
svn merge svn://127.0.0.1/project1/branches/branche_1@101 svn://127.0.0.1/project1/branches/branche_1 .
#千万看清楚后面是有一个点号,表示当前目录,也就是trunk目录

这时我想我们可以让svn给我们为所欲为的工作了

6.配置权限,我们把目录切换到版本库中project1中

svnserve.conf passwd authz 这三个文件,

svnserve.conf文件中将下面两行注释去掉

anon-access = read
auth-access = write
password-db = passwd

passwd文件

testsvn=123456

具体的权限配置可以配置authz,在这里不详细讲述了

svn+apache配置

这种方式和上面的区别就是提供服务端变了,之前是svnserve现在时apache的mod-dav-svn模块提供版本管理服务了

1.编译subversion时

sudo ./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache/bin/apxs  --with-serf=/usr/local/serf --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-sqlite=/usr/local/sqlite-amalgamation --enable-mod-activation#serf这个主要指为了解决用http协议访问的

注意:编译apache的编译参数后面要多加几个模块了

./configure --prefix=/usr/local/apache  --enable-modules=most --enable-mods-shared=most --enable-so --enable-dav --enable-dav-fs --enable-dav-lock 

2.配置httpd.conf来访问版本库

<Location /repo>
    DAV svn
    SVNParentPath /var/svn_repo
Location>

这样我们就可以通过http://127.0.0.1/repo/project1来访问project1这个版本库了,但是现在我们没有任何的权限控制,下面就利用apache的mod-dav-auth模块来配置权限

1.生成密码文件;利用apache的htpasswd命令,创建一个 testsvn用户

htpasswd -cm /usr/local/apache/svn_auth_file  testsvn

接下来就可以配置权限了


    DAV svn
    SVNParentPath /var/svn_repo
    AuthType Basic #验证类型
    AuthName "title name"
    AuthUserFile /usr/local/apache/svn_auth_file
    Require valid-user

通过上面的配置我们可以用http协议访问了,http://127.0.0.1/repo/project1这样就会提示输入用户和密码了

讲到这里便要告一段落了,下面要介绍使用svn的hook实现自动的svn update来达到备份的目的

钩子

最后要将的无非就是钩子了,钩子的含义相信大家应该明白,就是在程序中嵌入一些自定义的小程序。下面举一个例子:
我们需要提交的时候自动的将版本库中的修改同步到测试环境,下面我们可以修改post-commit.tmpl文件

mv post-commit.tmpl post-commit

REPOS="$1"
REV="$2"
TXN="$3"
svn update /home/baixs/svn_client/project1 --username=testsvn --password=a

svn使用的命令

1. svn log -v -r 版本号#查看特定版本的文件修改列表
2. 用svn命令行做回滚操作
    svn update #确保当前文件目录是最新的版本号
    svn log #查看某个文件的修改日志
    svn merge -r 28:25  #从版本好28回滚到25版本号
3. 本地编辑的撤销操作 svn revert 这个命令要慎用

svn switch –relocate svn://172.16.1.27/solution/sc8810/branches/GC

svn小技巧

如果svn是s状态,可能是因为网络终端导致的,我们可以先切换到别的分支,然后再切换回来

你可能感兴趣的:(centos)