搭建SVN步骤

发布时间 2023-10-07 17:30:56作者: 普里莫

如何在linux上搭建SVN

CV战士

https://www.cnblogs.com/oldxu/p/8626125.html

教程

https://www.runoob.com/svn/svn-revert.html

个人搭建流程

服务端搭建

# 1.安装subversion服务
yum install -y subversion

# 2.创建SVN版本库数据存储目录
mkdir -p /application/svndata

# 3.创建用户密码权限目录
mkdir -p /application/svnpasswd

# 4.初始化(创建项目,共享的目录)
svnadmin create /application/svndata/sadoc

# 查看初始化项目结构:
[root@web01 ~]# tree /application/svndata/sadoc/
/application/svndata/sadoc/
├── conf
│   ├── authz
│   ├── passwd
│   └── svnserve.conf
├── db
│   ├── current
│   ├── format
│   ├── fsfs.conf
│   ├── fs-type
│   ├── min-unpacked-rev
│   ├── revprops
│   │   └── 0
│   │       └── 0
│   ├── revs
│   │   └── 0
│   │       └── 0
│   ├── transactions
│   ├── txn-current
│   ├── txn-current-lock
│   ├── txn-protorevs
│   ├── uuid
│   └── write-lock
├── format
├── hooks
│   ├── post-commit.tmpl
│   ├── post-lock.tmpl
│   ├── post-revprop-change.tmpl
│   ├── post-unlock.tmpl
│   ├── pre-commit.tmpl
│   ├── pre-lock.tmpl
│   ├── pre-revprop-change.tmpl
│   ├── pre-unlock.tmpl
│   └── start-commit.tmpl
├── locks
│   ├── db.lock
│   └── db-logs.lock
└── README.txt              // 和导写的多了条这个,

# 5.编辑配置文件:
cd /application/svndata/sadoc/conf
vim svnserve.conf
[general]
12 # anon-access = read    ==> read改为none   (禁止匿名访问)
13 # auth-access = write   ==> 去掉前面井号注释  (认证访问)
20 # password-db = passwd  ==> password-db = /application/svnpasswd/passwd (密码文件)
27 # authz-db = authz      ==> authz-db = /application/svnpasswd/authz     (授权文件)

# 6.拷贝授权文件 和 密码文件:
[root@web01 conf]# cp authz passwd /application/svnpasswd/

# 7.启动svn:
[root@web01 conf]# svnserve -d -r /application/svndata

# 7.1启动svn报错
[root@web01 conf]# svnserve -d -r /application/svndata
svnserve: warning: cannot set LC_CTYPE locale
svnserve: warning: environment variable LANG is en
svnserve: warning: please check that your locale name is correct

# 7.2下面的警告解决办法
[root@web01 conf]# pkill svn
[root@web01 conf]# source /etc/sysconfig/i18n
[root@web01 conf]# svnserve -d -r /application/svndata
然后再启动就没有警告了。

# 8.检查端口3690,启动成功(可能要安装lsof命令)
yum install -y lsof

[root@web01 conf]# lsof -i:3690
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
svnserve 1800 root    3u  IPv4  54475      0t0  TCP *:svn (LISTEN)

# 9.创建用户密码
[root@web01 svnpasswd] vim /application/svnpasswd/passwd
格式:用户 = 密码
[users]
# harry = harryssecret
# sally = sallyssecret
zzgx = zzgx123                新
erjie = erjie123              添
dapeng = dapeng123            加
pangpang = pangpang123        的

# 10.给用户授权:
[root@web01 svnpasswd]# vim /application/svnpasswd/authz
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
ABC = dapeng,pangpang              新建的组

# [/foo/bar]
# harry = rw
# &joe = r
# * =

# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r

[sadoc:/]                         授权的项目
zzgx = rw
erjie = rw
@ABC = r

客户端管理

[root@db01 ~]# svn help
Available subcommands:
   add
   blame (praise, annotate, ann)
   cat
   changelist (cl)
   checkout (co)
   cleanup
   commit (ci)
   copy (cp)
   delete (del, remove, rm)
   diff (di)
   export
   help (?, h)
   import
   info
   list (ls)
   lock
   log
   merge
   mergeinfo
   mkdir
   move (mv, rename, ren)
   patch
   propdel (pdel, pd)
   propedit (pedit, pe)
   propget (pget, pg)
   proplist (plist, pl)
   propset (pset, ps)
   relocate
   resolve
   resolved
   revert
   status (stat, st)
   switch (sw)
   unlock
   update (up)     // 将svn的server端文件同步到本地
   upgrade

查看主库的内容

这个是执行了提交内容后的

## 在客户端查看svn内容
[root@db01 ~]# svn ls svn://10.0.0.7/sadoc
Authentication realm: <svn://10.0.0.7:3690> 9888c186-be90-453d-97a4-bf805eb63647
Password for 'root':         // 就是主机root用户的密码1
Authentication realm: <svn://10.0.0.7:3690> 9888c186-be90-453d-97a4-bf805eb63647
Username: zzgx              // svn管理的用户:zzgx
Password for 'zzgx':        // 刚刚刚刚输入zzgx的密码:zzgx123

-----------------------------------------------------------------------
ATTENTION!  Your password for authentication realm:

   <svn://10.0.0.7:3690> 9888c186-be90-453d-97a4-bf805eb63647

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
'/root/.subversion/servers'.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? yes   // 存储未加密的密码(是/否)? 是的
stu001/
stu002/
stu003/
stu004/
stu005/
stu006/
stu007/
stu008/
stu009/
stu010/

## 在服务端查看svn内容
[root@web01 sadoc]# svn list file:///application/svndata/sadoc/
stu001/
stu002/
stu003/
stu004/
stu005/
stu006/
stu007/
stu008/
stu009/
stu010/

拉取主库当前svn内容

这个也是执行了提交内容的

[root@db01 ~]# svn co svn://10.0.0.7/sadoc /root/sadoc/ --username=zzgx --password=zzgx123
A    sadoc/stu001
A    sadoc/stu010
A    sadoc/stu002
A    sadoc/stu003
A    sadoc/stu004
A    sadoc/stu005
A    sadoc/stu006
A    sadoc/stu007
A    sadoc/stu008
A    sadoc/stu009

# 从10.0.0.7的服务端拉取svn当前的内容,放到本地/root/sadoc/,没有目录也可以拉。

提交内容

# 先执行拉取,空内容也可以拉取
如果不先拉取,提交时内容不匹配提交不了,下文有介绍,自己看去

# 创建目录
[root@db01 sadoc]# mkdir stu{001..010}
[root@db01 sadoc]# svn add *
svn:  警告: “a.sh”已纳入版本控制
A         stu001
A         stu002
A         stu003
A         stu004
A         stu005
A         stu006
A         stu007
A         stu008
A         stu009
A         stu010

[root@db01 sadoc]# svn ci -m "w t f"
Adding         stu001
Adding         stu002
Adding         stu003
Adding         stu004
Adding         stu005
Adding         stu006
Adding         stu007
Adding         stu008
Adding         stu009
Adding         stu010

Committed revision 1.

# 把提交内容下载到本地:
[root@mha03 sadoc]# svn update

如何删除svn

从SVN删除已提交的版本号
# 1.停止SVN服务
[root@web01 ~]# killall svnserve

# 2.删除版本信息文件 登陆到SVN服务器,进入仓库所在目录 删除/application/svndata/sadoc/db/rep-cache.db文件 ...

# 3.修改当前版本记录文件 修改/application/svndata/sadoc/db/current文件,将6该为4。 至此,版本号已回退至4.

# 4.启动SVN服务
[root@web01 ~]# svnserve -d -r /application/svndata

SVN是什么

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

官方解释:为什么会有SVN这样一个项目?为了接管CVS的用户基础,确切的说,我们写了一个新的版本控制系统,它和CVS很相似,但是它修正了以前CVS所没有解决的许多问题。具体查看SVN官方首页。

SVN是一个非常通用的软件系统,它常被用来管理程序源码,但是它也可以管理任何类型的文件,如文本、视频、图片等等。

SVN 的一些概念

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

日常开发过程其实就是这样的(假设你已经Checkout并且已经工作了几天):Update(获得最新的代码) -->作出自己的修改并调试成功 --> Commit(大家就可以看到你的修改了) 。

如果两个程序员同时修改了同一个文件呢, SVN 可以合并这两个程序员的改动,实际上 SVN 管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN 都会自动合并两种修改。如果是同一行,SVN 会提示文件 Conflict, 冲突,需要手动确认。

SVN 的主要功能

  • (1)目录版本控制

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

  • (2)真实的版本历史

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

  • (3)自动提交

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

  • (4)纳入版本控管的元数据

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

  • (5)选择不同的网络层

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

  • (6)一致的数据处理方式

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

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

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

  • (8)Hackability

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

第1章SVN介绍及应用场景

1.1什么是SVN(Subversion)

Svn(subversion)是近年来崛起非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统。Svn版本管理工具随着时间改变的各种数据。这些数据防止在一个中央资料档案库(repository)中,这个档案库很像一个普通的文件服务器或者FTP服务器,但是,与其他服务器不同,SVN会备份并记录每个文件每一次的修改更新变动。这样就可以把任意一个时间点的档案恢复到想要的某一个旧的版本,当然也可以直接浏览指定文件的更新历史记录。

官方解释:为什么会有SVN这样一个项目?为了接管CVS的用户基础,确切的说,我们写了一个新的版本控制系统,它和CVS很相似,但是它修正了以前CVS所没有解决的许多问题。具体查看SVN官方首页。

SVN是一个非常通用的软件系统,它常被用来管理程序源码,但是它也可以管理任何类型的文件,如文本、视频、图片等等。

1.2SVN与Git的区别

1.2.1SVN集中式版本控制系统

SVN版本控制系统是集中式的数据管理,存在一个中央版本库,所有开发人员本地开发所使用的代码都是来自于这个版本库,提交代码也都必须提交到这个中央版本库。

SVN版本控制系统工作流程如下:

1.在中央库上创建或从主干复制一个分分支。

2.从中央库check out下这个分支的代码。

3.增加自己的代码文件,修改现存的代码或者删除代码文件。

4.commit代码,假设有人在刚刚的分支上提交了代码,你就会被提示代码过期,需要先up你的代码后再提交。up代码的时候如果出现冲突,需要解决好后再进行提交。

1.2.2Git分布式版本控制系统

git中没有了中央版本库的说法,但是为了开发小组的代码共享,我们通常还是会搭建一个远程git仓库。

但是和svn不同的是,开发者本地也包含了一个完整的git仓库,从某种程度上说本地的仓库和远程的仓库在身份上是等价的,没有主从之分。

如果是闭源项目,或者你习惯于以往的集中式的管理模式的话,那么在git下你也可以像SVN那样的工作,只是流程中可能会增加一些步骤。

1.你本地创建一个git库,并将其add到远程git库中。

2.你在本地添加或者删除文件,然后commit,当然commit操作都是提交到本地的git库中。(其实提交到git目录下的objects目录中)

3.将本地git库的分支push到远程git库的分支,如果这个时候远程git库中已经有别人push过,那么远程git库将不允许你push,这时候你需要先pull,如果有冲突,先处理好冲突,commit到本地git库后,再push到远程git库。

从上面的描述我们可以看到,我们每个开发人员的本地都会有一个git库,我们可以随时进行commit而不需要联网,可以随时查看历史版本,当某一个功能点开发完了之后我们可以将commit后的内容push到远程git库了,如果远程git库的版本在你上次clone或者pull之后变化了,那么需要进行pull并处理冲突,提交之后,在push到远程git库。

1.3SVN企业应用场景

SVN任是当前企业的主流。git正在发展,未来会成为主流。如果大家精力足够,建议同时掌握。

1.4运维人员掌握版本管理

对于版本管理系统,运维人员需要掌握的技术点:

1、安装、部署、维护、拍障。

2、简单使用,很多公司都是由开发来管理,包括建立仓库和添加删除账号。

3、对于版本控制系统,运维人员相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务。

1.5SVN服务运行模式与访问方式

1.5.1Svn服务端运行方式

SVN服务常见的运行访问方式有3种:

1、独立服务器访问

访问地址如:svn://svn.xuliangwei.com/sadoc;

2、借助Apache等http服务

访问地址如:http://svn.xuliangwei.com/sadoc;

单独安装Apache+svn

CSVN(apache+svn)是一个单独的整合软件,带web界面管理的SVN软件。

3、本地直接访问(例如:file:///application/svndata/sadoc)

咱们主要学习第一种方式以及第二种方式的CSVN web管理方式。

1.6Svn客户端访问方式

Svn客户端可以通过多种访问方式访问服务器端,例如:本地磁盘访问,或各种各样不同的网络协议访问,但一个版本库地址永远都是一个URL,URL反映了访问方法。

访问方式 说明
svn:// 通过TCP/IP自定义协议访问svnserve服务器。
http:// 通过WebDAV协议访问支持Subversion的Apache服务器
https:// 与http://相似,但是用SSL加密访问。
file:// 直接通过本地磁盘或者网络磁盘访问版本库。
svn+ssh:// 通过认证并加密的TCP/IP自定义协议访问svnserve服务器

1.7SVN档案库数据格式

SVN存储版本数据有2中方式:BDB(一种事物安全性表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

BDB:

伯克利DB(BerkeleyDB),版本库可以使用的一种经过充分测试的后台数据库实现,不能在通过网络共享的文件系统上使用,伯克利DB是Subversion1.2版本以前的缺省版本库格式。

FSFS:

一个专用于Subversion版本库的文件系统后端,可以使用网络文件系统(例如NFS或SMBFS)。是1.2版本及其后的缺省版本库格式。

1.8SVN版本控制系统优点

1、管理方便,逻辑清晰明确,符合一般人思维习惯。

2、易于管理,集中式svn服务器更能保证数据安全性。

3、代码一致性非常高。

4、适合开发人数不多的项目开发。

5、普及度高,大部分软件配置管理的大学教材都是SVN。

第2章SVN版本系统最佳实践

2.1SVN安装部署

检查操作系统环境,以及内核版本

[root@svn-node1 ~]# cat /etc/redhat-release #查看系统版本

CentOS release 6.7 (Final)

[root@svn-node1 ~]# uname -r #查看内核

2.6.32-573.el6.x86_64

SVN属于功能性软件,yum安装即是最佳实践。

[root@svn-node1 ~]# yum install subversion #安装Svn

[root@svn-node1 ~]# rpm -qa subversion #检查svn是否安装完毕

subversion-1.6.11-14.el6.x86_64

2.2创建SVN目录

建立svn版本库数据存储根目录(svndata)及用户、密码权限目录(svnpasswd)

[root@svn-node1 ~]# mkdir -p /application/svndata #数据存储根目录

[root@svn-node1 ~]# mkdir -p /application/svnpasswd #用户、密码权限目录

2.3建立项目版本库

创建一个新的Subversion项目sadoc,类似sadoc这样的项目可以创建多个,每个项目对应不同的代码,这里只是以创建一个项目为例演示:

[root@svn-node1 ~]# svnadmin create /application/svndata/sadoc #使用svnadmin创建项目版本库,以及初始化版本库

2.4调整SVN配置文件及权限文件

下面对svn全局配置文件进行配置管理:注意:修改位置顶格不能有空格,否则报错

[root@svn-node1 ~]# cd /application/svndata/sadoc/conf/

[root@svn-node1 conf]# cp svnserve.conf svnserve.conf.ori #备份SVN主配置文件,方便对比

[root@svn-node1 conf]# egrep -v "^$|#" svnserve.conf #打开如下注释的行

[general]

anon-access = none #read(匿名访问) none(不让匿名访问)

auth-access = write #授权用户可写

password-db = /application/svnpasswd/passwd #使用哪个文件作为帐号密码文件

authz-db = /application/svnpasswd/authz #使用哪个文件作为权限文件

realm = My xuliangwei First Repository #认证空间名,版本所在目录(可选)

[root@svn-node1 conf]# mv authz passwd/application/svnpasswd/ #把密码认证及权限模板拷到相关目录

[root@svn-node1 conf]# chmod 600 /application/svnpasswd/{authz,passwd} #修改权限,不允许其他用户读写执行权限

快速修改替换方法:

sed -i 's/# anon-access = read/anon-access=none/' svnserve.conf

sed -i 's/# auth-access = write/auth-access=write/g' svnserve.conf

sed -i 's@# password-db = passwd@password-db = /application/svnpasswd/passwd@g' svnserve.conf

sed -i 's@# authz-db = authz@authz-db = /application/svnpasswd/authz@g' svnserve.conf

2.5配置svn用户及密码

配置账户及密码 格式: user=passwd

[root@svn-node1 svnpasswd]# egrep -v "^$|#" /application/svnpasswd/passwd

[users]

xuliangwei = xlw123

xiaomi = xiaomi123

stu001 = 123

stu002 = 456

提示:

1.等号前为SVN账号,等号后为SVN密码,密码是明文的,注意密码权限

2.更改svnserve.conf时,需要重起SVN,更改authz,passwd文件时不需要重启

2.6配置svn用户及权限

权限使用的用户名,必须在passwd文件里面存在,权限配置文件的修改立即生效,不必重启SVN;

用户组格式:

[groups]

xuliangwei26 = stu001,stu002

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

版本库目录格式:

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

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

<用户名> = <权限>

方括号内部分可以有多种写法:

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

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

[sadoc:/linux] #表示对版本库sadoc中的linux项目设置权限;

[sadoc:/linux/centos] #表示对版本库sadoc中的linux项目的centos目录设置权限;

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

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

如下权限体系的控制

[root@svn-node1 svnpasswd]# egrep -v "#" /application/svnpasswd/authz

[aliases]

[groups]

xuliangwei26 = stu001,stu002

[sadoc:/]

xuliangwei = rw

[sadoc:/linux]

xiaomi = rw

[sadoc:/linux/centos]

@xuliangwei26 =r

根目录只有xuliangwei可以读写,匿名用户没有任何权限。

二级Linux目录只有xiaomi可以读写,匿名用户没有任何权限。

三级centos目录只有xuliangwei26组可读,但是xuliangwei可读写,xiaomi也可读写。

2.7svn启动命令详解

svn启动命令详解

[root@svn-node1 sadoc]# svnserve --help

usage: svnserve [-d | -i | -t | -X] [options]

Valid options:

-d [--daemon] : daemon mode #以守护进程运行

-i [--inetd] : inetd mode #以inetd模式运行

-t [--tunnel] : tunnel mode #以隧道模式运行

-X [--listen-once] : listen-once mode (useful for debugging) #调试模式

-r [--root] ARG : root of directory to serve #指定根目录

-R [--read-only] : force read only, overriding repository config file #只读,覆盖库的配置文件

--config-file ARG : read configuration from file ARG #从文件读取配置

--listen-port ARG : listen port #指定监听svn端口

​ [mode: daemon, listen-once]

--listen-host ARG : listen hostname or IP address #监听主机名或者IP地址

​ [mode: daemon, listen-once]

-T [--threads] : use threads instead of fork [mode: daemon] #线程的使用

--foreground : run in foreground (useful for debugging) #在前台运行(调试模式)

​ [mode: daemon]

--log-file ARG : svnserve log file #指定日志文件

--pid-file ARG : write server process ID to file ARG #指定pid文件路径

​ [mode: daemon, listen-once]

--tunnel-user ARG : tunnel username (default is current uid's name) #隧道用户名(默认UID的名称)

​ [mode: tunnel]

-h [--help] : display this help #查看帮助

--version : show program version information #显示程序版本信息

2.8配置并启动svn服务

[root@svn-node1 sadoc]# svnserve -d -r /application/svndata/#-d代表后台运行 -r 指定根目录

[root@svn-node1 sadoc]# netstat -lntup|grep 3690 #查看SVN端口

tcp 00 0.0.0.0:36900.0.0.0:* LISTEN 1855/svnserve

第3章SVN客户端管理

3.1Windows客户端管理

windows客户端下载TortoiseSVN软件进行代码的上传、下载、提交、更新、等操作管理。

使用xuliangwei用户来checkout

checkout 成功

添加新的文件,进行提交

通过browse浏览成功

3.2Linux客户端管理

3.2.1SVN建立目录树

[root@svn-node1 /]# mkdir -p /tmp/dir/linux/centos

[root@svn-node1 /]# svn import /tmp/dir/ svn://10.0.0.3/sadoc/ -m "import svntree" #导入svn目录树

Adding /tmp/dir/linux

Adding /tmp/dir/linux/centos

3.2.2从SVN库提取数据

将文件checkout到本地目录

[root@svn-node1 ~]# mkdir /svn-data

[root@svn-node1 ~]# cd /svn-data

[root@svn-node1 svn-data]# svn co svn://10.0.0.7/sadoc/ /svn-data/ --username xuliangwei --password xlw123

3.2.3从本地提交到SVN

客户端提交文件至SVN服务器,如下

[root@svn-node1 svn-sadoc]# mkdir stu00{10..12}

[root@svn-node1 svn-data]# svn add *

A stu0010

A stu0011

A stu0012

[root@svn-node1 svn-sadoc]# svn ci -m "Message data" --username xuliangwei --password xlw123

Adding stu0010

Adding stu0011

Adding stu0012

Committed revision 5.

第4章SVN备份实践

[root@svn-node1 svn-sadoc]# svnadmin --help

general usage: svnadmin SUBCOMMAND REPOS_PATH[ARGS & OPTIONS ...]

Type 'svnadmin help ' for help on a specific subcommand.

Type 'svnadmin --version' to see the program version and FS modules.

Available subcommands:

crashtest

create

deltify

dump

help (?, h)

hotcopy

list-dblogs

list-unused-dblogs

load

lslocks

lstxns

pack

recover

rmlocks

rmtxns

setlog

setrevprop

setuuid

upgrade

verify

第5章SVN钩子实践

5.1SVN钩子脚本简介

钩子脚本的具体写法就是操作系统中shell脚本程序的写法,可根据自己的SVN所在的操作系统和shell程序进行相对应的开发。

钩子脚本就是被某些版本库事件触发的程序,例如:创建新版本或修改未被版本控制的属性。每个钩子都能掌管足够的信息来了解发生了什么事件,操作对象是什么以及触发事件用户的账号。

根据钩子的输出或者返回状态,钩子程序能够以某种方式控制该动作继续执行,停止或者挂起。

5.2SVN的hooks模板

常见钩子脚本

钩子脚本 说明
post-commit 在提交完成成功创建版本之后执行该钩子,提交已经完成,不可更改,因此,本脚本的返回值被忽略。提交完成时触发事物
pre-commit 提交完成前触发执行脚本
start-commit 在客户端还没有向服务器提交数据之前,即还没有建议txn之前,执行该脚本(提交前触发事务)

5.3SVN钩子生产应用场景

pre-commit

1.闲置上传扩展名及大小啊,控制提交要输入的信息等。

post-commit

  1. SVN更新自动周知,MSN邮件或者短信周知。
  2. SVN更新触发checkout程序,然后实现rsync推送到服务器等。

5.4SVN钩子生产应用实践

5.4.1单台svn同步web目录

安装web服务

yum –y instal httpd 使用yum一键安装apache

service httpd start 启动apache服务测试

配置文件修改

cd /svndata/code1/hooks/ 进入仓库钩子目录

cp post-commit.tmpl post-commit 复制模版

chmod 755 post-commit 添加执行权限

> post-commit 清空配置信息

vim post-commit

#! /bin/sh

export LANG="zh_CN.UTF-8"
svn=/usr/bin/svn

$svn update /var/www/code1 --username admin --password admin

同步svn至/var/www/目录下 (admin用户必须对根目录有可读可写)

将Apache虚拟主机指向/var/www/code1 即可访问

关联Web目录

cd /var/www/

svn checkout svn://192.168.1.200/code1 checkout更新svn

首次checkout需要输入root的密码

其次输入post-commit里面定义同步的用户和密码

用户:admin

​ 密码: admin

首次需要确认是否保存密码 输入yes即可

5.4.2rsync与svn钩子结合实现数据实时同步

1、建立同步WEB目录

2、将SVN中内容checkout到WEB目录一份

[root@svn-node1 ~]# mkdir -p /data/www #建立同步Web目录

[root@svn-node2 ~]# svn co svn://10.0.0.7/sadoc /data/www/ --username=xuliangwei --password=xlw123 #将SVN中内容checkout到WEB目录一份

A /data/www/linux

A /data/www/linux/centos

Checked out revision 7.

5.5SVN钩子注意事项

1、钩子脚本的权限要允许svn执行,一般可以设置chmod 755 post-commit

2、写钩子脚本时要尽可能定义环境变量,主要是需要用命令的路径。因为SVN考虑安全问题,不会调用系统环境变量,所以如果发现手动执行post-commit没有问题,但是SVN自动执行也可能会无法执行。

3、在SVN upate之前一定要先手动checkout一份出来,还有尽可能要加上用户和密码,如果只是手动一样会更新,但自动触发可能就不能更新了。

第6章大中小型企业上线解决方案

SVN目录组织结构说明

branch #分支,为测试时使用,几天以上的项目必须开分支,测试需要本分支通过,主线合并到分支通过,才能合并到主线进行测试

tags #版本记录

trunk #主线,与正式线相对应,当天不上线文件不允许提交。