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是上一版本,也可以写具体版本号,这样输出结果是可以提交的)