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

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

 


1、搭建 svn 服务器 html


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

一、安装svn服务器mysql

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

若是须要更新 svn 版本可使用 wandisco 的 yum 源web

rpm -qa | grep subversion    查找已安装版本
yum remove subversion-1.6.11-15.el6_7.x86_64 -y  卸载安装的1.6版本
vim  /etc/yum.repos.d/wandisco-svn.repo
添加下面代码
[WandiscoSVN] name
=Wandisco SVN Repo baseurl=http://opensource.wandisco.com/centos/$releasever/svn-1.9/RPMS/$basearch/ enabled=1 gpgcheck=0
yum clean all
yum install subversion -y

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

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

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

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文件夹数据库

四、新增用户并设置密码apache

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

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

五、添加群组并增长访问控制windows

  修改文件 /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 表示对该目录有读写权限。最后一行的* =表示,除了上面设置了权限的用户组以外,其余任何人都被禁止访问本目录,这点比较重要。

六、升级成http认证服务器

升级http须要安装相关软件

yum install httpd mod_dav_svn 

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

七、修改 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>

八、修改文件夹属主为apache

chown -R apache.apache /data1/svn/project/

九、启动 httpd

service httpd start 

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

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

十一、若是出现 (13)Permission denied: Could not open password file: /data1/svn... 则是由于SELinux未关闭,受权是无效的,须要修改SVN目录的权限配置。运行下面的命令

chcon -R -h -t httpd_sys_content_t /data1/svn/project

成功运行后删掉 passwd 文件,这样密码就只有你知道了

十二、升级 https

通常公司的Svn服务器会搭建成https认证的服务器,密码则是使用ldap认证,因此搭建起来比较麻烦,除了httpd以外还要open-ssl等插件支持,但足够安全和实用。

yum install openssl mod_ssl -y
cd /etc/httpd/conf
openssl genrsa -des3 -out server.key 1024
命令运行期间须要用户输入并确认本身的密码

对凭证进行填写必要信息,须要填写国家(CN),邮箱,公司等等,按要求填写便可(后面好像不须要用到)
openssl req -new -key server.key > server.csr

生成证书
openssl req -x509 -days 2048 -key server.key -in server.csr > server.crt

修改配置文件 httpd.conf

vim httpd.conf

增长
LoadModule ssl_module modules/mod_ssl.so

在<Location /project>中的最后加上
SSLRequireSSL

在文件最后加上
SSLMutex default
SSLRandomSeed startup builtin
SSLSessionCache none

ErrorLog /var/log/httpd/SSL.log
LogLevel info
SSLEngine On
SSLCertificateFile conf/server.crt
SSLCertificateKeyFile conf/server.key   

重启 httpd,输入密码便可

页面上访问 https://master:443/project/

1三、commit 的时候提交备注

在 hooks 目录下面增长 pre-commit 文件便可,文件内容能够参考 pre-commit.tmpl 须要注意的是若是是中文在windows下可能会显示不了

#!/bin/sh
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c)
if [ "$LOGMSG" -lt 10 ]; then
echo -e "\n Please submit a comment greater than 10 characters."1>&2        
exit 1
fi

 1四、密码使用mysql保存验证

首先须要 按照 mod_auth_mysql

yum install mod_auth_mysql -y

配置可参考 http://modauthmysql.sourceforge.net/CONFIGURE

修改 httpd.conf 添加

LoadModule mysql_auth_module modules/mod_auth_mysql.so 

在 <location /project> 中修改

AuthMySQLEnable On
AuthMySQLHost master
AuthMySQLPort 3306
AuthMySQLSocket /data1/mysql/3306/mysql.sock
AuthMySQLUser svn
AuthMySQLPassword xxxx
AuthMySQLDB user
AuthMySQLUserTable user_auth
AuthMySQLNameField user_name
AuthMySQLPasswordField passwd
AuthMySQLNoPasswd Off
AuthMySQLPwEncryption md5   # 密码加密 md5
# AuthMySQLSaltField
AuthMySQLCharacterSet utf8
AuthMySQLAuthoritative On  # 只支持 mysql 验证 取消其余验证方式

在数据库 user 中新建一个表以下

mysql> show create table user_auth\G
*************************** 1. row ***************************
       Table: user_auth
Create Table: CREATE TABLE `user_auth` (
  `user_name` varchar(32) NOT NULL COMMENT '用户英文名',
  `passwd` varchar(256) NOT NULL COMMENT '用户密码',
  `last_modify` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户认证'
1 row in set (0.00 sec)

并新建用户

grant all privileges on user.user_auth to 'svn'@'master' identified by 'xxxx';

重启 httpd 便可。

若是遇到

MySQL ERROR: Can't connect to MySQL server on 'master' (13)

解决方法

1. 查看httpd_can_network_connect的值是否为off(例如:httpd_can_network_connect --> off)
# getsebool -a | grep httpd

2. 修改httpd_can_network_connect的值为on
# setsebool httpd_can_network_connect 1

3. 从新验证httpd_can_network_connect
# getsebool -a | grep httpd

4. 重启http
# service httpd restart

若是遇到 

Permission denied: make_sock: could not bind to address [::]:80

则使用

semanage port -a -t http_port_t -p tcp 80 

但因为个人 semanage 一直安装失败但要下载一大堆依赖包,太麻烦了,我就使用了下面的方法

setenforce 0     # 宽松模式
service httpd restart
setenforce 1   # 强制模式

 shell 下求 MD5 值的方法

echo -n '12345'|md5sum|cut -d ' ' -f1      
827ccb0eea8a706c4c34a16891f84e7b

 1五、若是配置办公网访问通常须要关闭 iptables 或者配置

iptables -nvL --line-number    # 查看规则

 iptables -I INPUT 4 -i eth0 -p tcp -s 10.1.126.0/8 --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT   # 在第4行插入443端口输入规则

iptables -I OUTPUT 1 -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT   # 第一行插入443端口输出规则

 

 2、svn经常使用命令

一、checkout到本地目录

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

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

svn add file

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

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

简写:svn ci

四、加锁/解锁

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

五、本地更新到某个版本

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

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

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

【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预约加入到版本库;K:被锁定】

2)svn status -v path  # 显示文件和子目录状态

第一列保持相同,第二列显示工做版本号,第三和第四列显示最后一次修改的版本号和修改人。

注:svn status、svn diff和svn revert这三条命令在没有网络的状况下也能够执行的,缘由是svn在本地的.svn中保留了本地版本的原始拷贝。

简写:svn st

七、删除文件

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]

八、查看日志

svn log file

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

九、查看文件详细信息

svn info file

十、比较差别

svn diff path  # 将修改的文件与基础版本比较
例如:svn diff test.php

svn diff -r m:n path  # 对版本m和版本n比较差别
例如:svn diff -r 200:201 test.php

简写:svn di

十一、将两个版本之间的差别合并到当前文件

svn merge -r m:n path

例如:svn merge -r 200:205 test.php   # 将版本200与205之间的差别合并到当前文件,可是通常都会产生冲突,须要手动修改文件

十二、Svn 帮助

svn help

svn help ci

 

 


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

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

svn list path   # 显示path目录下的全部属于版本库的文件和目录

简写:svn ls

1四、建立归入版本控制下的新目录

svn  mkdir *    #  建立归入版本控制下的新目录。

用法: (1)、mkdir PATH…
(2)、mkdir URL…

建立版本控制的目录。
(
1)、每个以工做副本 PATH 指定的目录,都会建立在本地端,而且加入新增调度,以待下一次的提交。 (2)、每一个以URL指定的目录,都会透过当即提交于仓库中建立.在这两个状况下,全部的中间目录都必须事先存在。

1五、恢复本地修改

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

用法: revert PATH…

注意: 本子命令不会存取网络,而且会解除冲突的情况。可是它不会恢复被删除的目录

1六、代码库URL变动

svn switch (sw):   更新工做副本至不一样的URL。

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

(1)、更新你的工做副本,映射到一个新的URL,其行为跟“svn update”很像,也会将服务器上文件与本地文件合并。这是将工做副本对应到同一仓库中某个分支或者标记的方法。

(2)、改写工做副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变更(好比方案名或是主机名称变更),可是工做副本仍旧对映到同一仓库的同一目录时使用这个命令更新工做副本与仓库的对应关系。

 

1七、解决冲突

svn resolved:  移除工做副本的目录或文件的“冲突”状态。
用法: resolved PATH…

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

1八、输出指定文件或URL的内容

svn cat 目标[@版本]…若是指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename    (PREV 是上一版本,也能够写具体版本号,这样输出结果是能够提交的)

 

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

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

相关文章
相关标签/搜索