1、安装文件
apr-1.4.6.tar.gz
apr-util-1.4.1.tar.gz
httpd-2.2.22.tar.gz
sqlite-3.6.23.tar.gz
subversion-1.7.4.tar.gz
2、软件安装
1)apr、apr-util安装
系统在默认情况下,是已经有apr-util及apr这两个包的,只不过他们的版本较低,只支持subversion 1.4
因此,具体可以看看:
# rpm -qa | grep apr
系统输出:
xorg-x11-drv-dynapro-1.1.0-2
apr-util-devel-1.2.7-11.el5_5.2
apr-util-1.2.7-11.el5_5.2
apr-1.2.7-11.el5_5.3
apr-devel-1.2.7-11.el5_5.3
apr-util-1.2.7-11.el5_5.2
apr-1.2.7-11.el5_5.3
而subversion要求较高的版本,为此,我们需要删除系统自带的apr,apr-util这两个包,强行删掉。
# rpm -e --allmatches apr-util --nodeps //强制删除
# rpm -e --allmatches apr --nodeps //强制删除
正式安装:
# tar -zxvf apr-1.4.6.tar.gz -C /usr/local/src
# cd /usr/local/src/apr-1.4.6
# ./buildconf
//验证系统是否有python、autoconf、libtool
# ./configure --prefix=/usr/local/apr
# make
# make install
# tar -zxvf apr-util-1.4.1.tar.gz -C /usr/local/src
# cd /usr/local/src/apr-util-1.4.1
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
#vim Makefile
将-lexpat修改为/usr/lib64/libexpat.la
# make
# make install
2)apache安装
# tar xzvf httpd-2.2.22.tar.gz -C /usr/local/src
# cd /usr/local/src/httpd-2.2.22
# ./configure --prefix=/usr/local/apache2 --enable-dav --enable-so --enable-modules=most --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/
//注:编译apache 时要加上--enable-dav 选项
# make
# make install
3)sqlite安装
# tar -zxvf sqlite-3.6.23.tar.gz -C /usr/local/src
# cd /usr/local/src/sqlite-3.6.23
#./configure --prefix=/usr/local/sqlite
# make
# make install
4)svn安装
# tar -zxvf subversion-1.7.4.tar.gz -C /usr/local/src
# cd /usr/local/src/subversion-1.7.4/
# ./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache2/bin/apxs
--with-apr=/usr/local/apr
--with-apr-util=/usr/local/apr-util
--with-sqlite=/usr/local/sqlite/
--with-ssl --with-zlib //打开zlib 库支持
--enable-maintainer-mode //打开调试和编译时警告,仅供开发人员使用
# make
# make install
5) Apache的整合
# vi /usr/local/apache2/conf/httpd.conf
//查看文件内是否已包含下述内容
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
//有说明自动安装成功,没有的话自行添加
//配置apache 中svn 认证
<Location /svn> //设置url,代表要访问的仓库的父目录
DAV svn
SVNParentPath /file/svn //svn 根目录
AuthType Basic
AuthName "SVN Test"
AuthzSVNAccessFile /file/svn/authz.conf //svn 认证文件,创建一个authz.conf文件
AuthUserFile /file/svn/authfile //apache 认证文件
Require valid-user
</Location>
启动apache
/usr/local/apache2/bin/apachectl start
httpd: Syntax error on line 54 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_dav_svn.so into server: /usr/local/svn/lib/libsvn_subr-1.so.0: undefined symbol: sqlite3_clear_bindings
解决办法:
[root@SVNSERVER ~]# ln -s /usr/local/sqlite/lib/libsqlite3.so.0.8.6 /usr/lib64/
ln: 正在创建指向“/usr/local/sqlite/lib/libsqlite3.so.0.8.6”的符号链接“/usr/lib64/libsqlite3.so.0.8.6”: 文件已存在
[root@SVNSERVER ~]# mv /usr/lib64/libsqlite3.so.0.8.6 /usr/local/src/bak
[root@SVNSERVER ~]# ln -s /usr/local/sqlite/lib/libsqlite3.so.0.8.6 /usr/lib64/
[root@SVNSERVER ~]# ldconfig
[root@SVNSERVER ~]# /usr/local/apache2/bin/apachectl start l
[root@SVNSERVER ~]# /usr/local/apache2/bin/apachectl -t
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK
解决httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[root@SVNSERVER ~]# vim /usr/local/apache2/conf/httpd.conf
ServerName localhost:80
[root@SVNSERVER ~]# /usr/local/apache2/bin/apachectl start
httpd (pid 2067) already running
6)svn的使用
创建svn 项目仓库
# mkdir /file/svn 创建svn 根目录
# svnadmin create /file/svn/test //创建项目测试仓库test
如果出现如下错误
svnadmin: error while loading shared libraries: libaprutil-1.so.0: cannot open shared object file: No such file or directory
出现这个错误的原因就是svnserver在编译时是加了apache支持的,现在无法找到apr-util库,一般情况下我们将apr-util的lib目录加入到系统的lib路径中就可以了,比如我服务器的apache的apr和apr-util的安装目录分别如下:
apr路径:/usr/local/apr
apr-util路径:/usr/local/apr-util
然后我们打开/etc/ld.so.conf文件,并加入上面两个目录下的lib路径到文件中,如下:
# vi /etc/ld.so.conf
...
/usr/local/apr/lib
/usr/local/apr-util/lib
在文件的最后加入上面的两行指定路径即可,然后更新下:进入/sbin,运行./ldconfig
创建apache 认证用户
# /usr/local/apache2/bin/htpasswd -cm /file/svn/authfile dingfei
输入密码:abcd1234
# /usr/local/apache/bin/htpasswd /file/svn/authfile liuyubao
//再添加一个用户
//第一次设置用户时使用-c表示新建一个用户文件。回车后输入用户密码,完成对用户的增加,再增加别的用户时,不用加c
Svn 权限配置文件
# vi /file/svn/authz.conf
//建立authz.conf文件,添加如下三行
[test:/] //这表示,仓库test的根目录下的访问权限
hrwang = rw //test仓库hrwang用户具有读和写权限
yli = r //test仓库yli用户具有读权限
//附加的一些说明
[test2:/] //test2仓库根目录下的访问权限
hrwang = r //hrwang用户在test2仓库根目录下只有读权限
bao = //bao用户在 test2仓库根目录下无任何权限
[/] //这个表示在所有仓库的根目录下
* = r //这个表示对所有的用户都具有读权限
#[groups] //这个表示群组设置
#svn1-developers = hrwang, bao //这个表示某群组里的成员
#svn2-developers = hrwang
#[svn1:/]
#@svn1-developers = rw //如果在前面加上@符号,则表示这是个群组权限设置
//例如我们把权限配置成这样:
[groups]
valid-user=hrwang,yli
invalid-user=bao
[test:/]
@valid-user=rw
@invalid-user=
//这样的话,用户hrwang和yli可以读写,而bao不可以读写
启动svn 服务
/usr/local/svn/bin/svnserve -d -r /file/svn
下面这条语句将把路径/usr/local/src/test下找到的文件导入到你创建的Subversion仓库中去,提交后的修订版为1。
./svn import -m "New import" /usr/local/www/ file:///usr/local/svnroot/repository/bjso/
Adding /home/cuijie/web/index.html
Committed revision 1.
6)测试连接
打开浏览器,输入http://192.168.1.107/svn/test #本例服务器ip是192.168.1.107
使用刚才创建的权限用户名与密码登录即可访问
注意:在你上传文件的时候可能会有如下权限不足的提示
Permission denied
vn: Commit failed (details follow):
svn: Can't create directory '/data/svn/test': Permission denied
这是因为apache在线程用户没有权限访问svn的仓库,两者分别属于不同的用户者
本例apache属于daemon拥有者,而svn仓库属于root拥有者
解决方法:
chown -R daemon /data/svn/test
chmod -R 755 /data/svn/test
重启下apache:
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
3、SUBVERSION命令
1、将文件checkout到本地目录
Svn checkou path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co
2、往版本库中添加新的文件
Svn add file
例如:svn add test.php(添加test.php)
Svn add *.php(添加当前目录下所有的php文件)
3、将改动的文件提交到版本库
Svn commit –m “LogMessage“[-N][--no-unlock]PATH(如果选择了保持锁,就使用–no-unlock开关)
例如:svn commit-m“addtestfileformytest“test.php
简写:svnci
4、加锁/解锁
Svn lock –m “LockMessage“[--force] PATH
例如:svn lock –m “locktestfile“ test.php
Svn unlock PATH
5、更新到某个版本
Svn update -rmpath
例如:
svnupdate如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
Svn update -r200 test.php(将版本库中的文件test.php还原到版本200)
Svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svnresolved,最后再提交commit)
简写:svnup
6、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)【?:不在Subversion命令的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
2)svn status -vpath(显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svnst
7、删除文件
svndeletepath-m“deletetestfle“
例如:svndeletesvn://192.168.1.1/pro/domain/test.php-m“deletetestfile”
或者直接svndeletetest.php然后再svnci-m‘deletetestfile‘,推荐使用这种
简写:svn(del,remove,rm)
8、查看日志
svnlogpath
例如:svnlogtest.php显示这个文件的所有修改记录,及其版本号的变化
9、查看文件详细信息
svninfopath
例如:svninfotest.php
10、比较差异
svndiffpath(将修改的文件与基础版本比较)
例如:svndifftest.php
svndiff-rm:npath(对版本m和版本n比较差异)
例如:svndiff-r200:201test.php
简写:svndi
11、将两个版本之间的差异合并到当前文件
svnmerge-rm:npath
例如:svnmerge-r200:205test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
12、SVN帮助
svnhelp
svnhelpci
——————————————————————————
以上是常用命令,下面写几个不经常用的Subversion命令
13、版本库下的文件和目录列表
svnlistpath
显示path目录下的所有属于版本库的文件和目录
简写:svnls
14、创建纳入版本控制下的新目录
svnmkdir:创建纳入版本控制下的新目录。
用法:1、mkdirPATH…
2、mkdirURL…
创建版本控制的目录。
1、每一个以工作副本PATH指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。
15、恢复本地修改
svnrevert:恢复原始未改变的工作副本文件(恢复大部份的本地修改)。revert:
用法:revertPATH…
注意:本子Subversion命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录。
16、代码库URL变更
svnswitch(sw):更新工作副本至不同的URL。
用法:
1、switchURL[PATH]
2、switch–relocateFROMTO[PATH...]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svnupdate”很像,也会将服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用这个Subversion命令更新工作副本与仓库的对应关系。
17、解决冲突
svnresolved:移除工作副本的目录或文件的“冲突”状态。
用法:resolvedPATH…
注意:本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让PATH可以再次提交。
18、输出指定文件或URL的内容。
svncat目标[@版本]…如果指定了版本,将从指定的版本开始查找。
svncat-rPREVfilename>filename(PREV是上一版本,也可以写具体版本号,这样输出结果是可以提交的)