文章来源

一,安装要的软件

wget 

wget 

1、安装apr

2、安装apr-util

3、安装apache-2.4.1

4、下载subversion-1.8.5 下载地址:http://apache.dataguru.cn/subversion/subversion-1.8.5.tar.gz

5、解压

tar -zxvf subversion-1.8.5.tar.gz

cd subversion-1.8.5

6、subversion需要sqlite的支持,所以先下载sqlite

wget http://www.sqlite.org/sqlite-amalgamation-3071501.zip

unzip sqlite-amalgamation-3071501.zip

mv sqlite-amalgamation-3071501 sqlite-amalgamation

7、安装subversion

./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-openssl=/usr/include/openssl --with-zlib=/usr/local/lib

make && make install

先查看一下安装成功了没有

cd /usr/local/subversion

bin/svnserve --version

如果显示出版本信息,说明安装成功

为了方便以后操作,把svn的安装目录加入到环境变量

vim /etc/profile

#在末尾加入以下代码:

PATH=$PATH:/usr/local/subversion/bin

#保存退出

:wq

#使刚才的修改生效

source /etc/profile

8、安装成功,开始配置

mkdir -p /home/svn/repos  #创建版本库目录 repos目录名可以自定义

svnadmin create /home/svn/repos #创建版本

编辑/home/svn/repos/conf/svnserve.conf,内容修改为:

[general]

anon-access = none

auth-access = write

password-db = passwd  #用户密码文件

authz-db = authz  #授权登录文件

realm = repos

先添加要登录到SVN的用户和密码

useradd username

passwd username

修改/home/svn/repos/conf/passwd文件,添加用户及密码:

[users]

username=password #用户名=密码   一行一个

修改/home/svn/repos/conf/authz文件,控制用户权限

[groups]

admin = username

[/]

@admin = rw

# [repos:/abc/aaa]

# king = rw

# [repos:/pass]

# king =svn

注意:

* 权限配置文件中出现的用户名必须已在用户配置文件中定义。

* 对权限配置文件的修改立即生效,不必重启svn。

用户组格式:

[groups]

= ,

其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。

版本库目录格式:

[<版本库>:/项目/目录]

@<用户组名> = <权限>

<用户名> = <权限>

其中,方框号内部分可以有多种写法:

[/],表示根目录及以下,根目录是svnserve启动时指定的,我们指定为/home/svndata,[/]就是表示对全部版本库设置权限。

[repos:/] 表示对版本库repos设置权限;

[repos:/abc] 表示对版本库repos中的abc项目设置权限;

[repos:/abc/aaa] 表示对版本库repos中的abc项目的aaa目录设置权限;

权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。

权限可以是w、r、wr和空,空表示没有任何权限。

9、启动SVN

svnserve -d --listen-port 9999 -r /home/svn

-d :表示以daemon方式(后台运行)运行;

--listen-port 9999 :表示使用9999端口,可以换成你需要的端口。但注意,使用1024以下的端口需要root权限;

-r /home/svndata :指定根目录是/home/svnd。

10、将SVN添加到开机启动

编辑/etc/rc.d/rc.local文件,加入如下启动命令:

/usr/local/subversion/bin/svnserve -d --listen-port 9999 -r /home/svn

如果想要停止SVN,可用以下命令

killall svnserve

如果想将svn作为服务,在/etc/init.d/目录下新建名为svn的文件并设置权限为755,并添加如下代码:

#!/bin/bash

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

# chmod 755 /etc/init.d/svn

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

SVN_HOME=/home/svn

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

then

    echo "svnserver startup: cannot start"

    exit

fi

case "$1" in

    start)

        echo "Starting svnserve..."

        /usr/local/subversion/bin/svnserve -d --listen-port 9999 -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

2,查看svn信息

[root@BlackGhost bin]# /usr/local/svn/bin/svnserve –version

svnserve, version 1.6.1 (r37116)
compiled Jul  7 2010, 23:06:21

Copyright (C) 2000-2009 CollabNet.

Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository back-end (FS) modules are available:

* fs_fs : Module for working with a plain file (FSFS) repository.

Cyrus SASL authentication is available.

3,将svn的bin目录加到环境变量中去

[root@BlackGhost /]# PATH=$PATH:/usr/local/svn/bin

[root@BlackGhost /]# export PATH
[root@BlackGhost /]# svn
svn            svnadmin       svnlook        svnsync
svn2abs        svndumpfilter  svnserve       svnversion

三,建立仓库,配置svn

1,建个svn的根目录,因为项目不只一个

[zhangy@BlackGhost ~]$ mkdir -p /home/zhangy/www    #-p的意思是说如果没有父目录建之

2,建个仓库

[zhangy@BlackGhost ~]$ mkdir -p /home/zhangy/www/repos

[zhangy@BlackGhost www]$ svnadmin create /home/zhangy/www/repos/

3,导入数据

[zhangy@BlackGhost ~]$ svn import ./svntest file:///home/zhangy/www/repos -m “Initial repository test”

Adding         svntest/test.php

Committed revision 1.

4,修改svnserve.conf

[root@BlackGhost conf]# vi svnserve.conf

[general]

anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

5,目录控制文件authz

[root@BlackGhost conf]# vi authz

[groups]

admin= zhangy

[repos:/]

@admin = rw
* = r

6,修改用户密码文件passwd

[root@BlackGhost conf]# vi passwd

[users]

zhangy = *****

四,启动和简单测试

1,启动svn

[root@BlackGhost www]# svnserve -d -r /home/zhangy/www

在这里特别的要注意,/home/zhangy/www是仓库的根目录,不要和[repos:/]目录重叠了。如果重叠是会提示你以下错误

[zhangy@BlackGhost checkout]$ svn co svn://127.0.0.1/

svn: Authorization failed

2,测试svn

a),checkout

[zhangy@BlackGhost checkout]$ svn co svn://127.0.0.1/repos

Authentication realm: <svn://127.0.0.1:3690> 3d0c32b1-3841-4518-b6b1-dcdb6c7ed716
Password for ‘zhangy’:
———————————————————————–
ATTENTION!  Your password for authentication realm:

<svn://127.0.0.1:3690> 3d0c32b1-3841-4518-b6b1-dcdb6c7ed716

can only be stored to disk unencrypted!  You are advised to configure

your system so that Subversion can store passwords encrypted, if
possible.  See the documentation for details.

You can avoid future appearances of this warning by setting the value

of the ’store-plaintext-passwords’ option to either ‘yes’ or ‘no’ in
‘/home/zhangy/.subversion/servers’.
———————————————————————–
Store password unencrypted (yes/no)? yes
A    repos/test.php
Checked out revision 1.

checkout的时候会出现Store password unencrypted,解决办法

vi /home/zhangy/.subversion/servers

找到以下内容,注释去掉并改成yes就行了

# store-plaintext-passwords = no

b),add 和submit

[zhangy@BlackGhost repos]$ svn add aaa.php

A         aaa.php
[zhangy@BlackGhost repos]$ svn commit aaa.php -m “ok”
Adding         aaa.php
Transmitting file data .
Committed revision 2.

 

 

1、将文件checkout到本地目录

svn checkout 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 “add test file for my test“ test.php
简写:svn ci

4、加锁/解锁

svn lock -m “LockMessage“ [--force] PATH

例如:svn lock -m “lock test file“ test.php
svn unlock PATH

5、更新到某个版本

svn update -r m path

例如:
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up

6、查看文件或者目录状态

1)svn status path(目录下的文件和子目录的状态,正常状态不显示)

【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st

7、删除文件

svn delete path -m “delete test fle“

例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种
简写:svn (del, remove, rm)

8、查看日志

svn log path

例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化

9、查看文件详细信息

svn info path

例如:svn info test.php

10、比较差异

svn diff path(将修改的文件与基础版本比较)

例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di

11、将两个版本之间的差异合并到当前文件

svn merge -r m:n path

例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)

12、SVN 帮助

svn help

svn help ci

——————————————————————————

以上是常用命令,下面写几个不经常用的

——————————————————————————

13、版本库下的文件和目录列表

svn list path

显示path目录下的所有属于版本库的文件和目录
简写:svn ls

14、创建纳入版本控制下的新目录

svn mkdir: 创建纳入版本控制下的新目录。

用法: 1、mkdir PATH…
2、mkdir URL…
创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。

15、恢复本地修改

svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:

用法: revert PATH…
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录

16、代码库URL变更

svn switch (sw): 更新工作副本至不同的URL。

用法: 1、switch URL [PATH]
2、switch –relocate FROM TO [PATH...]

1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将

服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。

17、解决冲突

svn resolved: 移除工作副本的目录或文件的“冲突”状态。

用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。

18、输出指定文件或URL的内容。

svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。

svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)