搭建 SVN 及使用

1.1 SVN 简介

Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史

1.1.1 SVN中的一些概念

    repository(源代码库)
       源代码统一存放的地方
  Checkout (提取)
       当你手上没有源代码的时候,你需要从repository checkout一份
  Commit (提交)
       当你已经修改了代码,你就需要Commit到repository
    Update (更新)
       当你已经Checkout了一份源代码, Update一下你就可以和Repository上的源代码同步,你手上的代码就会有最新的变更

1.1.2 日常开发说明

日常开发过程其实就是这样的(假设你已经Checkout并且已经工作了几天):Update(获得最新的代码) -->作出自己的修改并调试成功 --> Commit(大家就可以看到你的修改了) 。    如果两个程序员同时修改了同一个文件呢,  SVN可以合并这两个程序员的改动,实际上SVN管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN都会自动合并两种修改。如果是同一行,SVN会提示文件Confict, 冲突,需要手动确认。

1.1.3 客户端软件

 客户端软件:

(1)Windows下常用的客户端软件常用TortoiseSVN。它是一个免费的开源的客户端。 
    下载地址:http://pan.baidu.com/s/1dFF08Dz
(2)向Myeclipse,也有一些SVN的插件。

1.1.4 Subversion提供以下主要功能

1.1.4.1  目录版本控制

 CVS 只能跟踪单个文件的历史, 不过 Subversion 实作了一个 “虚拟” 的版本控管文件系统, 能够依时间跟踪整个目录的变动。 目录和文件都能进行版本控制。

1.1.4.2   真实的版本历史

自从CVS限制了文件的版本记录,CVS并不支持那些可能发生在文件上,但会影响所在目录内容的操作,如同复制和重命名。除此之外,在CVS里你不能用拥有同样名字但是没有继承老版本历史或者根本没有关系的文件替换一个已经纳入系统的文件。在Subversion中,你可以增加(add)、删除(delete)、复制(copy)和重命名(rename),无论是文件还是目录。所有的新加的文件都从一个新的、干净的版本开始。

1.1.4.3   自动提交

一个提交动作,不是全部更新到了档案库中,就是完全不更新。这允许开发人员以逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。

1.1.4.4   纳入版本控管的元数据

每一个文件与目录都附有一組属性关键字并和属性值相关联。你可以创建, 并儲存任何你想要的Key/Value对。 属性是随着时间来作版本控管的, 就像文件內容一样。

1.1.4.5  选择不同的网络层

Subversion 有抽象的档案库存取概念, 可以让人很容易地实作新的网络机制。 Subversion 可以作为一个扩展模块嵌入到Apache HTTP 服务器中。这个为Subversion提供了非常先进的稳定性和协同工作能力,除此之外还提供了许多重要功能: 举例来说, 有身份认证, 授权, 在线压缩, 以及文件库浏览等等。还有一个轻量级的独立Subversion服务器, 使用的是自定义的通信协议, 可以很容易地通过 ssh 以tunnel 方式使用。

1.1.4.6   一致的数据处理方式

Subversion 使用二进制差异算法来异表示文件的差异, 它对文字(人类可理解的)与二进制文件(人类无法理解的) 两类的文件都一视同仁。 这两类的文件都同样地以压缩形式储存在档案库中, 而且文件差异是以两个方向在网络上传输的。

1.1.4.7  有效的分支(branch)与标签(tag)

在分支与标签上的消耗并不必一定要与项目大小成正比。 Subversion 建立分支与标签的方法, 就只是复制该项目, 使用的方法就类似于硬连接(hard-link)。 所以这些操作只会花费很小, 而且是固定的时间。

1.1.4.8  Hackability

Subversion没有任何的历史包袱; 它主要是一群共用的 C 程序库, 具有定义完善的API。这使得 Subversion 便于维护, 并且可被其它应用程序与程序语言使用。

1.2 环境的部署

根据公司的开发开发需要,准备为开发项目组建立svn服务,集中代码分发管理,要求有三点
²  可以实现开发人员使用svn客户端连接使用
²  开发人员可以执行上传下载操作
²  需要实现代码的自动提交web

1.2.1 查看系统环境

1.2.1.1  查看系统版本

[root@ebs-24380 ~]# cat /etc/redhat-release
CentOS release 6.4 (Final)

1.2.1.2  查看系统全部信息

[root@ebs-24380 ~]# uname -a
Linux ebs-24380 2.6.32-642.6.2.el6.x86_64 #1 SMP Wed Oct 26 06:52:09 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

1.2.1.3  查看系统内核

[root@ebs-24380 ~]# uname -r
2.6.32-642.6.2.el6.x86_64

1.3 安装svn

1.3.1 配置yum

[root@ebs-24380 ~]# cd /etc/yum.repos.d/
[root@ebs-24380  yum.repos.d]# cp -pr CentOS-Base.repo CentOS-Base.repo.bak
[root@VM_142_148_centos yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
[root@ bs-24380  yum.repos.d]# yum makecache

1.png

[root@ebs-24380 ~]# yum -y install subversion

2.png

1.3.2 查找系统svn的安装包

[root@ebs-24380 ~]# rpm -aq subversion

3.png

1.3.3 配置并启动svn

1.3.3.1  创建SVN版本库根目录(svndata)及密码权限目录(svnpasswd

[root@ebs-24380 ~]# mkdir -p /application/svndata
[root@ebs-24380 ~]# mkdir -p /application/svnpasswd
[root@ebs-24380 ~]# tree /application/svn*
/application/svndata
/application/svnpasswd
0 directories, 0 files

1.3.3.2   启动SVN服务指定服务的SVN根目录

[root@ebs-24380 conf]# svnserve -d -r /application/svndata
后台运行;-r 指定运行目录
注:查看svnserver命令帮助
[root@ebs-24380 jsrijian_com]# svnserve --help
用法: svnserve [-d | -i | -t | -X] [options]
有效选项:
1.         -d [--daemon]            : 后台模式
2.         -i [--inetd]             : inetd 模式
3.         -t [--tunnel]            : 隧道模式
4.         -X [--listen-once]       : 监听一次方式(调试用)
5.         -r [--root] ARG          : 服务的根目录
6.         -R [--read-only]         : 强制只读;覆盖版本库配置文件
7.         --config-file ARG        : 从文件 ARG 读取配置
8.         --listen-port ARG        : 监听端口
9.                                    [方式: daemon, listen-once]
10.      --listen-host ARG        : 监听主机名称或IP地址
11.                                 [方式: daemon, listen-once]
12.      -T [--threads]           : 使用线程代替进程 [方式: daemon]
13.      --foreground             : 在前台运行(调试用)
14.                                 [方式: daemon]
15.      --log-file ARG           : svnserve 日志文件
16.      --pid-file ARG           : 写进程 PID 到文件 ARG
17.                                 [方式: daemon, listen-once]
18.      --tunnel-user ARG        : 隧道用户名(默认是当前UID对应的用户名)
19.                                 [方式: tunnel]
20.      -h [--help]              : 显示本帮助
21.      --version                : 显示程序版本信

1.3.4 查看服务是否启动

1.3.4.1  查看进程

[root@ebs-24380 ~]# ps -ef |grep svn
root     26910     1  0 13:52 ?        00:00:00 svnserve -d -r /application/svndata
root     27088 25401  0 14:04 pts/4    00:00:00 tail -f /tmp/svn_update.log
root     28647 22042  0 16:09 pts/0    00:00:00 grep svn

1.3.4.2  查看端口

[root@ebs-24380 ~]# netstat -antup |grep "svn"
tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      
26910/svnserve

1.4 创建SVN版本库

1.4.1 新的Subversion项目

1.4.1.1  创建一个新的Subversion项目(版本库)

[root@ebs-24380 svndata]# svnadmin create /application/svndata/jsrijian_com
[root@ebs-24380 ~]# ls -l /application/svndata/jsrijian_com/
total 24
drwxr-xr-x 2 root root 4096 Jun 22 13:52 conf
drwxr-sr-x 6 root root 4096 Jun 22 14:17 db
-r--r--r-- 1 root root    2 Jun 22 13:42 format
drwxr-xr-x 2 www  www  4096 Jun 22 14:00 hooks
drwxr-xr-x 2 root root 4096 Jun 22 13:42 locks
-rw-r--r-- 1 root root  229 Jun 22 13:42 README.txt

1.4.1.2  查看帮助

[root@ebs-24380 ~]# svnadmin --help
general usage: svnadmin SUBCOMMAND REPOS_PATH  [ARGS & OPTIONS ...]
一般用法: svnadmin SUBCOMMAND REPOS_PATH  [ARGS & OPTIONS ...]
使用“svnadmin help <subcommand>” 得到子命令的帮助信息。
使用“svnadmin --version”查看程序的版本号和文件系统模块

4.png

[root@ebs-24380 ~]# svnadmin help create
create: usage: svnadmin create REPOS_PATH
Create a new, empty repository at REPOS_PATH.
在 REPOS_PATH 创建一个新的空版本库。
  有效选项:
  --bdb-txn-nosync         : 在提交事务时禁用fsync [BDB]
  --bdb-log-keep           : 禁用自动删除日志文件 [BDB]
  --config-dir ARG         : 从目录 ARG 读取用户配置文件
  --fs-type ARG            : 版本库类型: “fsfs”(默认)或“bdb”
  --pre-1.4-compatible     : 使用与1.4之前版本兼容的格式
  --pre-1.5-compatible     : 使用 Subversion 1.5 之前版本的格式
  --pre-1.6-compatible     : 使用与 1.6 之前版本兼容的格式

1.5 仓库用户权限配置

1.5.1 配置允许用户solin读写访问

1.5.1.1  备份配置文件

[root@ebs-24380 ~]# cd /application/svndata/jsrijian_com/conf/
[root@ebs-24380 conf]## /bin/cp svnserve.conf svnserve.conf.bak$(date +%F)

1.5.1.2  过滤要修改的配置文件

[root@ebs-24380 conf]# egrep "\-access|\-db =" svnserve.conf
anon-access = rend
auth-access = write
password-db = passwd
authz-db = authz

1.5.1.3  修改后的参数(可以用sed替换,也可用vi/vim直接修改)

[root@ebs-24380 conf]# egrep "\-access|\-db =" svnserve.conf
anon-access = none
auth-access = write
password-db = /application/svnpasswd/passwd
authz-db = /application/svnpasswd/authz

1.6 配置authzpasswd证书文件

1.6.1 把密码证书文件模板复制到相关目录并修改文件权限

[root@ebs-24380 conf]cp authz passwd /application/svnpasswd
[root@ebs-24380 ~]# ls -l /application/svnpasswd/
total 8
-rwx------ 1 root root 1153 Jun 21 16:53 authz
-rwx------ 1 root root  352 Jun 21 16:54 passwd

1.6.2 authzpasswd的配置

root@ebs-24380 svnpasswd]# vim authz
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
g_users = admin,cuijinpeng
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[jsrijian_com:/]
@g_users = rw
cuijinpeng = rw
 
[root@ebs-24380 svnpasswd]# vim passwd
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.
[users]
# harry = harryssecret
# sally = sallyssecret
admin = 123456.com
cuijinpeng = cuijinpeng

1.7 重启SVN

[root@ebs-24380 svnpasswd]# pkill svnserve
[root@ebs-24380 svnpasswd]# ps -ef |grep svn
root      68326658  0 17:52 pts/0    00:00:00 grep svn
[root@ebs-24380 svnpasswd]# svnserve -d -r /application/svndata/
[root@ebs-24380 svnpasswd]# ps -ef |grep svn
root      68341  0 17:52 ?        00:00:00 svnserve -d -r /application/svndata/
root      68366658  0 17:52 pts/0    00:00:00 grep svn

1.8 Windows(客户端)安装TortoisSVN

1.8.1 官网下载TortoisSVN

https://tortoisesvn.net/downloads.html

1.8.2 安装

1.8.2.1  下载软件后,双击程序进行安装,点击“Next”,我这里选择的试64SVN

7.png

1.8.2.2  在许可证协议页面,选择“I Accept the terms in the License Agreement”,点击“Next

8.png

1.8.2.3  在自定义选项页面,可以选择安装目录,也可以直接点击“Next”进行安装;

1.9 Windows使用SVN版本控制系统

1.9.1 连接的方式,账户及密码

svn;//192.168.8.100/jsrijian_com           #你自己的服务器IP
用户名:admin 密码:123456.com

1.9.2 选择本地目录或创建目录作为拉取(同步)SVN项目的库的目录,在目录中选择SVN Checkout


1.10 服务器端的设置

1.10.1 服务器的系统字符集

[root@ebs-24380 svnpasswd]# echo $LANG
en_US.utf8
[root@ebs-24380 svnpasswd]# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"
[root@ebs-24380 svnpasswd]# vim /www/wdlinux/etc/php.ini
 [root@ebs-24380 svnpasswd]# egrep "default_charset" /www/wdlinux/etc/php.ini
default_charset = "iso-8859-1"
;ibase.default_charset =

1.10.2 字符集必须统一不统一的错误

1.10.2.1  ftp 里面的中文字符集乱码

16.png

1.10.2.2  后台的web端页面乱码

17.png

1.10.3 错误处理办法

[root@ebs-24380 svnpasswd]# echo $LANG
zh_CN.UTF-8
[root@ebs-24380 svnpasswd]# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"
[root@ebs-24380 svnpasswd]# vim /www/wdlinux/etc/php.ini
 [root@ebs-24380 svnpasswd]# egrep "default_charset" /www/wdlinux/etc/php.ini
default_charset = " zh_CN.UTF-8"
;ibase.default_charset =

1.10.3.1  要求开发人员在上传ftp  ftp的传输模式的字符集强制设置或默认设置utf-8

18.pngc

改变后

19.png

1.10.4 进入到服务器的web目录里

开发提出了新的需求,只需要代码Uploads目录下所有的代码所有我们这里进入到Uploads目录下
[root@ebs-24380 conf]# cd /www/wwwroot/jsrijian_com/public_html/kq/Uploads/

1.10.5 在查看upload目录下的文件

[root@ebs-24380 Uploads]# ls
Img

1.10.6 检出一个项目到网站目录

[root@ebs-24380 Uploads]#  svn checkout svn://192.168.8.100/jsrijian_com  /www/wwwroot/jsrijian_com/public_html/kq/Uploads

20.png

这时,网站目录已成为SVN的工作副本,我们要做的就是让这个工作副本自动更新

1.10.6.1  增加hooks(钩子)文件

[root@ebs-24380 Uploads]# cd /application/svndata/jsrijian_com/hooks/
[root@ebs-24380 hooks]# cp -pr post-commit.tmpl post-commit
[root@ebs-24380 hooks]# vim post-commit
REPOS="$1"
REV="$2"
export LANG="zh_CN.UTF-8"
#export LC_ALL="zh_CN.UTF-8"
SVN_PATH=/usr/bin/svn
WEB_PATH=/www/wwwroot/jsrijian_com/public_html/kq/Uploads
LOG_PATH=/tmp/svn_update.log
#此行已注释
#/usr/bin/svn update --username user --password password $WEB_PATH --no-auth-cache
echo "\n\n\n##########开始提交 " `date "+%Y-%m-%d %H:%M:%S"` '##################' >>$LOG_PATH
echo `whoami`,$REPOS,$REV >> $LOG_PATH
#注意将此行user和password改为你具体的user和password
$SVN_PATH update --username admin --password 123456.com $WEB_PATH --no-auth-cache >> $LOG_PATH
chown -R www:www $WEB_PATH

1.10.6.2  给钩子设置权限

[root@ebs-24380 hooks]# chown -R www:www .
[root@ebs-24380 hooks]# chmod 755 post-commit

1.10.6.3  让开发把项目文件导入svn库中

看到下图说明开发已经把项目导入到库中

21.png

1.10.6.4  或者手动命令行导入

[root@ebs-24380 Uploads]#  svn import /www/wwwroot/jsrijian_com/public_html/kq/Uploads/ file:///application/svndata/jsrijian_com/ -m "import"

1.1.1.1  导入的日志监控

[root@ebs-24380 ~]# tail -f /tmp/svn_update.log

22.png

 


打赏 支付宝打赏 微信打赏

最后编辑于:2017/06/23作者: 富华运维空间

相关推荐

发表评论

动态鼠标蜘蛛网特效