版本控制-svn服务器搭建和常用命令(centos 6.3),-svncentos


  Svn是比较优秀的版本控制工具,虽然功能和性能上无法和Git媲美,但由于其容易搭建和使用的特性,所以在各个小公司还是很受欢迎的。使用Git可参考《版本控制-Git服务器搭建和常用命令使用》本文介绍svn服务器搭建和常用命令介绍。

服务器搭建

  本地服务器

  http服务器

命令

  常用命令

  不常用命令

 


 


[root@master data1]# cat /etc/issue CentOS release 6.3 (Final) Kernel \r on an \m [root@master data1]# getconf LONG_BIT 64

一、搭建svn本地服务器

1、安装svn服务器

[root@master data1]# yum install subversion -y

2、新建svn服务器目录并初始化第一个仓库project

mkdir /data1/svn
svnadmin create /data1/svn/project

3、新建文件夹并导入服务器作为Svn仓库project的第一个文件夹

cd /data1
mkdir -p test/client test/server
svn import test file:///data1/svn/project/ -m 'init svn project'
rm -rf test

这样就将test目录下的client和server文件夹导入到仓库project下,然后删掉test文件夹

4、新增用户并设置密码

  修改文件 /data1/svn/project/conf/passwd 新增用户 lx、u1、u2、u3,对应的明文密码在 "=" 右边

[users]
# harry = harryssecret
# sally = sallyssecret
lx = lx_passwd
u1 = u1_passwd
u2 = u2_passwd
u3 = u3_passwd

5、添加群组并增加访问控制

  修改文件 /data1/svn/project/conf/authz,增加g_lx和g_user两个群组,并对project仓库设置访问控制权限,不同目录允许不同群组的不同操作

[groups]
g_lx = lx
g_user = u1, u2, u3

[project:/]
@g_lx = rw
* =

[project:/server]
@g_lx = rw
@g_user = r
* =

[project:/client]
@g_lx = rw
@g_user = rw
* =

r 表示对该目录有读权限,w 表示对该目录有写权限,rw 表示对该目录有读写权限。最后一行的* =表示,除了上面设置了权限的用户组之外,其他任何人都被禁止访问本目录,这点比较重要。

6、修改配置文件

  修改文件 /data1/svn/project/conf/svnserve.conf 读取正确的配置

[general]
anon-access = None
auth-access = write
password-db = /data1/svn/project/conf/passwd
authz-db = /data1/svn/project/conf/authz

anon-access   控制没注册用户访问版本库的权限。取值范围为write、read和none,默认是read
auth-access   控制已注册用户访问版本库的权限。取值范围为write、read和none,默认是write              
password-db  指定用户名口令文件名。没有绝对路径则文件位置为conf目录的相对路径。
authz-db       指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。  没有绝对路径则文件位置为conf目录的相对路径。     
realm           指定版本库的认证域,即在登录时提示的认证域名称。

7、启动Svn本地服务器

svnserve -d -r /data1/svn/
ps -ef | grep svn
netstat -anp | grep svn

8、在其他机器上check out

svn co svn://master/project

Username: lx
Password for 'lx':

master为域名,建议直接使用ip地址即可。

遇到Store password unencrypted (yes/no)? 输入yes

遇到Password for 'root': 直接按回车然后输入用户名 lx和密码

测试提交命令

cd project/
cd client/
touch client.sh
svn add client.sh
svn ci -m 'add client.sh'

二、升级成http认证服务器

一般公司的Svn服务器会搭建成https认证的服务器,密码则是使用ldap认证,所以搭建起来比较麻烦,除了httpd之外还要open-ssl等插件支持,但足够安全和实用。本文只介绍普通的http认证,并且采用本地密码验证。

1、升级http需要安装相关软件

yum install subversion mysql-server httpd mod_dav_svn sendmail wget gcc-c++ make unzip -y

2、http之支持加密的密码,所以需要将svn的明文密码转换

touch webpasswd
htpasswd -b webpasswd  lx lx_passwd

一步一步转换或者在 /data1/svn/project/conf 目录下新建下面perl脚本 pd.pl

#!/usr/bin/perl

use warnings;
use strict;

open (FILE, "passwd") or die ("Cannot open the passwd file!\n");

open (OUT_FILE, ">webpasswd") or die ("Cannot open the webpasswd file!\n");
close (OUT_FILE);

foreach (<FILE>) {
    if($_ =~ m/^[^#].*=/) {
        $_ =~ s/=//;
        `htpasswd -b webpasswd $_`;
    }
}
运行 perl pd.pl

输出:
Adding password for user lx
Adding password for user u1
Adding password for user u2
Adding password for user u3

3、修改 httpd.conf 文件

 vim /etc/httpd/conf/httpd.conf 

在文件最后添加

<Location /project>
     DAV svn
    SVNPath /data1/svn/project/
    AuthType Basic
    AuthName "svn for project"
    AuthUserFile /data1/svn/project/conf/webpasswd
    AuthzSVNAccessFile /data1/svn/project/conf/authz
    Satisfy all
    Require valid-user
</Location>

4、修改文件夹属主为apache

chown -R apache.apache /data1/svn/project/
ps aux | grep httpd   可以看出用户apache

apache   26834  0.0  0.0 281608  3788 ?        S    18:29   0:00 /usr/sbin/httpd -DFOREGROUND
apache   26835  0.0  0.0 281840  5072 ?        S    18:29   0:00 /usr/sbin/httpd -DFOREGROUND
apache   26836  0.0  0.0 298372  6644 ?        S    18:29   0:00 /usr/sbin/httpd -DFOREGROUND
apache   26837  0.0  0.0 298372  6644 ?        S    18:29   0:00 /usr/sbin/httpd -DFOREGROUND
apache   26838  0.0  0.0 281680  4816 ?        S    18:29   0:00 /usr/sbin/httpd -DFOREGROUND
apache   26839  0.0  0.0 298360  6512 ?        S    18:29   0:00 /usr/sbin/httpd -DFOREGROUND
apache   26854  0.0  0.0 281680  4812 ?        S    18:30   0:00 /usr/sbin/httpd -DFOREGROUND

5、重启httpd

service restart httpd

6、打开web页面 http://master/project/ 

建议更换成ip地址。输入账户密码如下:

 

三、svn常用命令

1、checkout到本地目录

svn -–username=*** --password=*** checkout path

2、往版本库中添加新的文件

svn add file

3、将改动的文件提交到版本库

svn commit -m "LogMessage" [-N] [--no-unlock] PATH  
# 如果选择了保持锁,就使用–no-unlock开关 # -m 后面是提交的日志信息,一般情况是必填的。

简写:svn ci

4、加锁/解锁

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

5、本地更新到某个版本

svn update -r * path   # *为版本号
svn update   # 整个文件夹
svn update file   # 单独一个文件

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://master/project/test.php -m “delete test file”

或者分步骤(推荐使用这种)
svn delete test.php
svn ci -m ‘delete test file‘

简写:svn  [del, remove, rm]

8、查看日志

svn log file

显示这个文件的所有修改记录,及其版本号的变化

9、查看文件详细信息

svn info file

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

 

本文部分内容是参考网上资源,由博主@Lx整理。

原创文章,转载请备注原文地址 http://www.cnblogs.com/lxmhhy/p/6044054.html

知识交流讨论请加qq:1130010617。谢谢合作。

 

相关内容