码迷,mamicode.com
首页 > 其他好文 > 详细

svn

时间:2016-05-23 06:42:56      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

SVN

 

 

svn是什么

    svn简介

    svn原理

 

svn编译安装

    服务端安装

    服务端配置

    服务端设置开机启动

    客户端安装

 

svn怎么用

    创建版本库

    配置用户及权限

    基本客户端操作

    使用标准

 

其它

    结合apache

    nginx、apache、svn三者配合

    eclipse插件

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Svn是什么

简介

Svn全称subversion。是一个开源版本控制系统。Subversion将文件存放在中心版本库里。这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况。通过她,开发者可以很容易的将数据恢复到以前的版本,并且可以查看数据的修改细节等。可以将其称为一种"时间机器"。

    Subversion 允许不同的用户在各自的电脑上以多线程的模式修改和管理同一组位于中心版本库的数据,因此可以促进团队协作。另外,它是一个通用系统,可以管理任何类型的文件集。

    其它常见版本控制系统:VSS,Visual Source Save,微软公司的版本控制器软件;CVS,Concurrent Versions System,开源免费的另外一款版本控制系统;ClearCase,IBM公司的。

svn原理

Svn对于客户端和服务端数据文件的交互可以选择多种协议,svn协议、http或者https协议,默认支持svn协议,借助mod_dav_svn 模块,配合http服务器比如apache可以支持http和https协议。对应这两种不同协议,svn有2种不同的运行方式,一种是独立的svn服务器,另一种是借助apache运行。

Svn采用的是C/S架构,用户通过svn客户端操作svn服务器上的版本库。如下图1所示。

 

 

技术分享

 

 

 

 

 

 

技术分享技术分享技术分享

 

 

 

 

 

 

图1 svn架构采用C/S模式

 

svn存储版本数据也有2种方式:BDB(一种事务安全型存储模式,Berkeley DB 数据库)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

为什么使用svn

  • 为团队提供了所有项目文档的回退按钮;
  • 支持多个开发人员在可控的方式下为相同的代码工作;
  • 版本控制系统保存了文档在过去的各个改动,便于查找是谁,在何时,因为什么修改了文档;
  • 支持在文档的主线上同时有多个版本;
  • 支持查询在某个时点上项目各个文档的状态,可用于研究生产效率等,也可用于对以前的软件发行版的再发行。

Svn编译安装

服务端

下载subversion:http://pan.baidu.com/s/1pJFGdS3

下载apr和apr-util(apache运行时库文件支持):http://pan.baidu.com/s/1c0osjeS

下载sqlite-amalgamation(提供sqlite支持):http://pan.baidu.com/s/1i35cXYd

 

首先查看系统是否已经安装apr及apr-util,若无,则安装。若有,但是版本较低则卸载重新安装:

查看某个安装包是否已经安装命令:

1.    # rpm -qa | grep "软件或者包的名字"或者# rpm –q "软件或者包的名字"

2.    # yum list installed | grep "软件名或者包名"

卸载已安装的软件服务命令:

  1. #yum –y remove "软件或者包的名字"
  2. #yum –y erase "软件或者包的名字"
  3. #rpm –e "软件或者包的名字"

 

安装apr:

    解压:# tar –zxvf apr-1.5.0.tar.gz

    进入目录直接配置编译安装即可,默认安装路径: /usr/local/apr

安装apr-util:

    解压:#tar –zxvf apr-util-1.5.3.tar.gz

    进入源码目录编译安装 ./configure --with-apr=/usr/local/apr

                            make && make install

    安装完默认会安装到 /usr/local/apr

安装subversion:

    解压:#tar –zxvf subversion-1.8.5.tar.gz

    由于需要sqlite支持,同同时解压sqlite-amalgamation-3071501.zip

    #unzip sqlite-amalgamation-3071501.zip

    拷贝sqlite-amalgamation-3071501里的文件到subversion-1.8.5下面的目录sqlite-amalgamation中,若没有此目录,则创建。

    编译安装:

    ./configure --prefix=/usr/local/webserver/svn/ --without-berkeley-db --with-zlib --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr/

    如果需要结合apache 则先安装apache之后,加上参数

--with-apxs=/usr/local/apache/bin/apxs 编译subversion 这样才会在subversion源码目录下生成2so文件。

 

    #make && make install

 

    安装完之后将svn加入环境变量:

    #Vi /etc/profile 在最后加入一行export PATH=/usr/local/webserver/svn/bin:$PATH

    #source /etc/profile使其生效

    测试是否安装成功:

    #svnversion –version

    正确输出结果:

技术分享

 

将svn加入到开机启动:

编辑rc.local文件:vi /etc/rc.d/rc.local

加入如下启动命令:

svnserve -d –listen-port 999 -r /opt/svn

 

将svn作为服务:

在/etc/rc.d/init.d/目录下新建名为svn的文件

并设置权限为755:chmod 755 /etc/rc.d/init.d/svn

编辑svn文件:vi /etc/rc.d/init.d/svn, 在里面添加如下代码:

#!/bin/bash

# build this file in /etc/rc.d/init.d/svn

# chmod 755 /etc/rc.d/init.d/svn

# centos下可以用如下命令管理svn: service svn start(restart/stop)

SVN_HOME=/opt/svn

if [ ! -f "/usr/local/webserver/svn/bin/svnserve" ]

then

echo "svnserver startup: cannot start"

exit

fi

case "$1" in

start)

echo "Starting svnserve..."

/usr/local/webserver/svn/bin/svnserve -d -r $SVN_HOME

echo "Finished!"

;;

stop)

echo "Stoping svnserve..."

killall svnserve

echo "Finished!"

;;

restart)

$0 stop

$0 start

;;

*)

echo "Usage: svn { start | stop | restart } "

exit 1

esac

 

之后便可以以service svn start(restart/stop)方式启动SVN。

 

 

编译安装过程中可能会遇到的错误及解决办法:

1 如果编译时报如下错误:
no acceptable C compiler found in $PATH
说明没有gcc库,使用如下命令安装gcc后再编译:
yum -y install gcc

 

2 如果 make install 出现下面错误:
/home/upload/subversion-1.6.6/subversion/svnversion/.libs/lt-svnversion: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
make: *** [revision-install] Error 127
解决办法:
编辑/etc/ld.so.conf文件
vi /etc/ld.so.conf
添加下面一行代码
/usr/local/lib
保存后运行ldconfig
/sbin/ldconfig
注:ld.so.confldconfig用于维护系统动态链接库。

 

3 当配合apache使用时,启动svnserve 若出现如下错误:

svnserve: error while loading shared libraries: libaprutil-1.so.0

解决办法:

需要将apache lib目录加入系统

cd /etc/ld.so.conf.d

vi apache.conf

加入/usr/local/webserver/apache/lib

使其生效:

Ldconfig -v

 

客户端

下载svn客户端TortoiseSVN:

    Windows 32位版:http://pan.baidu.com/s/1kT2rdNh

    Windows 64位版:http://pan.baidu.com/s/1i3mMds5

安装即可。

SVN怎么用

创建版本库

创建版本库根目录:

#mkdir –p /opt/svn/test01

创建版本库:

#svnadmin create /opt/svn/test01

此时会在目录/opt/svn/test01 下生成版本库及配置文件。接下来配置用户及权限。

配置用户及权限

在版本库目录下有个conf目录,相关的配置文件都在这里。

首先配置svn服务器配置:

#Vi svnserve.conf

 

 

 

技术分享

 

修改完立即生效,不用重启系统

 

接下来设置用户账号信息:

#vi passwd

技术分享

密码为明文,每行用户信息前面不能有空格。

 

接下来设置用户组及权限:

#vi authz

技术分享

每行信息前面同样不能有空格。

 

配置完之后,启动svn:

#svnserve –d –r /opt/svn默认启动端口为3690,需要打开防火墙的3690端口

指定不同端口:

#svnserve –d –listen-port 999 –r /opt/svn注意,使用1024以下的端口需要root权限

 

查看是否启动成功:

#netstat –anp | grep "svnserve"

 

测试:

首先创建一个工作目录,然后进入该工作目录执行以下更新操作。

# Svn checkout svn://127.0.0.1/test01 ./

执行成功结果如下:

技术分享

 

另外,如果配置多个版本库,为了共享用户配置及组和权限的配置,可以单独讲passwd及authz文件取出公用,并配置各个版本库下的conf/svnserve.conf。如下:

修改版本库配置文件:
版本库1
vi /opt/svndata/repos1/conf/svnserve.conf
内容修改为:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos1
版本库2:
vi /opt/svndata/repos2/conf/svnserve.conf
内容修改为:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos2
即除realm = repos2外,其他与版本库1配置文件完全相同。如果有更多的版本库,依此类推。

常用操作

主要讲解在linux上的版本库常用操作,windows客户端简略。

1 将文件纳入svn版本库    

    # svn add *

2 将已经纳入版本库的文件提交到svn上

    #svn commit test.php –m "增加了…" -F ../svn.log

    捡入之前要更新(检出)

3 下载更新

#Svn checkout svn://127.0.0.1/test01 ./

 

4 查看svn 更新日志

    到需要查看日志的目录下执行,svn log

 

5 还原改动

    未提交之前:

    Svn revert ./test.php

    已经提交(已检入):

    首先 svn uptate 更新到最新版

    然后用 svn log 查看文件日志,这时候提交时填写的说明信息就派上用场了。

6 查看两个修订版之间的不同:

svn diff -r 旧修订版序号:新修订版序号 your_file_path

决定用哪个旧的修订版号后,用旧的修订版号文件覆盖新的修订版号文件。

svn merge -r 新修订版序号:旧修订版序号 your_file_path

还需要:

svn commit -m "恢复到某修订版(某修订版作废)"

 

7查看版本库中文件及目录列表

#Svn list

 

8 svn创建目录

    #svn mkdir svn://127.0.0.1/test01/branches -F ../svn.log -F后的参数为记录操作日志

    #svn commit –m "创建了branches目录"

 

9svn cat -- 显示特定版本的某文件内容

    #svn cat -r 4 test.c #查看版本4中的文件test.c的内容,不进行比较。

 

10清理工作副本:svn cleanup

有时可能会出现"工作副本已锁定"错误。若要删除锁定,并递归清理工作副本,请使用 svn update。

 

11拷贝文件和目录

    # svn copy path/file_name newpath/new_file_name

#svn commit -m "xxxx"

12重命名目录/文件

    #svn move file_name new_file_name

 

13删除文件

将本地工作拷贝删除,然后提交更新

    #svn delete file_path

    # svn commit

    # svn –m "删除了文件XXXX"

版本冲突解决

Windows客户端解决版本冲突:

  1. 彼此修改的代码是不在同一行,这样svn可以非常方便的把两者的代码进行合并
  2. 当彼此修改的代码是同一行代码。遇到冲突,svn也会把两者代码融合在一起(同时生成了3个文件,直接把他们删除即可。两者代码融合在一起会产生一些无关信息,直接删除,把代码调整好直接上传即可)

技术分享

Linux客户端解决版本冲突

svn默认不对文件加锁。

如果不同人编辑了同一个文件的不同部分,提交时会自动合并。

如果不同人编辑了同一个文件的同一部分,后提交者会报告合并冲突。

解决方法(人工仲裁):

放弃改动;

坚持你的改动,找到.mine的文件名,恢复为原文件名,然后执行:

svn resolved file_name

 

使用标准

1 使用标签和分支:

三个约定俗成的目录,SVN的标准目录结构:trunk、branches、tags:

•trunk:主干,是日常开发进行的地方。

•branches:分支,一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branches目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。

•tags:标签。目录一般是只读的,这里存储阶段性的发布版本。

 

发布分支:

#svn cp -m "创建用于实现radio标签的分支"服务器端src(trunk)服务器端dest(新branches)

 

切换分支:

    #svn switch 服务器端分支目录

 

2要经常更新update

多人合作时:

•更新要经常频繁的做,尽量让问题及早暴露,便于处理。

•提交代码前要更新,否则容易产生版本冲突。

 

3本地与服务器端建立关联

技术分享

客户端首次与svn版本库建立关联使用checkout检出项目,以后每次更新代码库,都是使用update

4 Tortoise SVN常见图标含义

技术分享

其它

结合apache

一般情况下不需要结合apache,如遇某些特殊情况需要结合apache,实现通过http或者https协议进行访问操作,则按如下步骤:

 

下载httpd-2.4.7.tar.gz:http://pan.baidu.com/s/1c0Fw9K8

查看系统是否已经自带httpd

Whereis httpd 或者rpm –q httpd

 

卸载原有系统自带httpd服务yum –y remove httpd

 

卸载系统自带apr yum –y remove apr Apache可移植运行时( Apache Portable Runtime,简称APR)是Apache HTTP服务器的支持库,提供了一组映射到下层操作系统的API

 

解压:#tar –zxvf httpd-2.4.7.tar.gz

编译安装:

./configure --prefix=/usr/local/webserver/apache --enable-so --enable-dav --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr

Make&& make install

 

注意将源码目录下的support目录的权限改宽松

比如chmod -R 777 support

 

 

编译subversion,具体步骤参考svn服务端编译安装章节:

./configure --prefix=/usr/local/webserver/svn/ --without-berkeley-db --with-zlib --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr/--with-apxs=/usr/local/apache/bin/apxs

Make 之后就会在subversion-1.8.5/subversion/mod_authz_svn/.libs目录下生成

mod_authz_svn.so文件,在

 

编译安装完apache及subversion之后(注意先安装apache后安装subversion),配置apache 支持svn:

    修改apache的配置文件conf/httpd.conf

    增加以下三行:

LoadModule dav_module modules/mod_dav.so

LoadModule dav_svn_module modules/mod_dav_svn.so

LoadModule authz_svn_module modules/mod_authz_svn.so

    注意:一定要先加载mod_dav.so,否则提示错

Cannot load modules/mod_dav_svn.so into server: /usr/local/webserver/apache/modules/mod_dav_svn.so: undefined symbol: dav_register_provider

    增加:

    <Location /svn>

DAV svn

SVNParentPath /opt/svn

AuthType Basic

AuthName "Subversion Repository"

AuthUserFile /opt/svn/repo_conf/passwd

AuthzSVNAccessFile /opt/svn/repo_conf/authz

Require valid-user

</Location>

 

 

注意:

1版本库目录的用户组和用户需要与apache的用户组和用户统一

2 不需要启动svnserve

 

配合Nginx转发

技术分享

 

 

 

 

 

 

编译:

./configure –prefix=/usr/local/webserver/apache --enable-so --enable-rewrite --enable-mods-shared=most --with-mpm=worker --disable-cgid --disable-cgi

 

编译安装apache 参数:

./configure --prefix=/usr/local/webserver/httpd --with-included-apr --enable-dav --enable-so  --with-so --enable-ssl --with-ssl --enable-mods-shared=most --with-mpm=worker

 

./configure --prefix=/usr/local/webserver/httpd--enable-dav --enable-so --enable-mods-shared=most --with-mpm=worker--with-included-apr

注意将源码目录下的support目录的权限改宽松比如chmod -R 777 support

 

 

 

15个常用操作:

http://www.cnblogs.com/buffer/archive/2009/11/10/1600059.html

 

svn

标签:

原文地址:http://www.cnblogs.com/yizhinageyuanfang/p/5518583.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!