标签:
SVN
svn是什么
svn简介
svn原理
svn编译安装
服务端安装
服务端配置
服务端设置开机启动
客户端安装
svn怎么用
创建版本库
配置用户及权限
基本客户端操作
使用标准
其它
结合apache
nginx、apache、svn三者配合
eclipse插件
Svn全称subversion。是一个开源版本控制系统。Subversion将文件存放在中心版本库里。这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况。通过她,开发者可以很容易的将数据恢复到以前的版本,并且可以查看数据的修改细节等。可以将其称为一种"时间机器"。
Subversion 允许不同的用户在各自的电脑上以多线程的模式修改和管理同一组位于中心版本库的数据,因此可以促进团队协作。另外,它是一个通用系统,可以管理任何类型的文件集。
其它常见版本控制系统:VSS,Visual Source Save,微软公司的版本控制器软件;CVS,Concurrent Versions System,开源免费的另外一款版本控制系统;ClearCase,IBM公司的。
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方式更安全一点。
下载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 "软件名或者包名"
卸载已安装的软件服务命令:
安装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源码目录下生成2个so文件。
#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.conf和ldconfig用于维护系统动态链接库。
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
安装即可。
创建版本库根目录:
#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客户端解决版本冲突:
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,实现通过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
编译:
./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
标签:
原文地址:http://www.cnblogs.com/yizhinageyuanfang/p/5518583.html