• SVN版本管理


    一、搭建SVN服务端

    1、安装配置SVN服务 
    光盘安装svn yum -y install subversion 
    image_1ct2j03pf1dvc1c1t1o9s19lh12jj13.png-7.7kB

    image_1ct2j77f6192c1lvplku1rds1r891g.png-24.2kB

    2、建立项目版本库

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

    image_1ct2le47akt5g6v1s6k1iqum552d.png-35.3kB

    3、编辑svn配置文件 
    备份配置文件 cp svnserve.conf{,.bak} 
    修改配置文件:vim svnserve.conf 
    image_1ct2locck1c2u1lj9jghr2b7tk2q.png-62.9kB

    4、将authz文件和passwd文件拷贝到/application/svnpasswd下

     
    [root@jenkins conf]# cp /application/svndata/yunjisuan/conf/authz /application/svnpasswd/
    [root@jenkins conf]# cp /application/svndata/yunjisuan/conf/passwd /application/svnpasswd/

    5、启动svn服务---svnserve -d -r /application/svndata/ 
    svn启动命令帮助 svnserve --help

    image_1ct2m3b6cci31rdo1iah1q1jddq37.png-67.7kB

    image_1ct2m4uqq4e21beh1mlfhrh1l5n3k.png-17.7kB

    source /etc/sysconfig/i18n --->启用中文字符集 
    image_1ct2m8fk7c9t1oe41rhg1v9911cj41.png-8.4kB

    6、passwd文件及密码设置 
    image_1ct2mcdf5k2e1msf1jfmhk91vc74e.png-13.5kB

    7、authz的授权

    注意: 1,权限配置文件中出现的用户名必须已在用户配置文件中定义 2,对权限配置文件的修改立即生效,不必重启svn

     
    1. 权限配置说明
    2. #用户组格式:
    3. groups
    4. =,
    5. 其中,1个用户组可以包含1个或多个用过户,用户间以逗号分隔。
    6. 例如:harry\_and\_sally = harry,sally #==>用户组 = 用户1,用户2
    7. #版本库目录格式:
    8. [<版本库>:/项目/目录] #例如:[repository:/baz/fuz]
    9. @<用户组名> = <权限> #例如:@harry\_and\_sally = rw
    10. <用户名> = <权限> #例如:harry = rw
    11. #其中,方框号内部分可以有多种写法:
    12. [/],表示根目录及以下,根目录是svnserve启动时指定的,我们指定为/application/svndata,[/]就是表示对全部版本库设置权限。
    13. [repos:/],表示对版本库repos设置权限。
    14. [repos:/yunjisuan],表示对版本库repos中的yunjisuan项目设置权限。
    15. [repos:/yunjisuan/benet],表示对版本库repos中的yunjisuan项目的benet目录设置权限。
    16. #权限主体可以是用户组,用户或*,用户组在前面加@,*表示全部用户。
    17. #权限可以是w,r,wr和空,空表示没有任何权限。
    18. #authz中每个参数都要顶格写,开头不能有空格。
    19. #对于组,要以@开头,用户不需要@开头。

    编辑authz配置文件进行授权,在authz末尾加入以下几句代码 
    image_1ct2sld4v7ed1ab1k3cnia1u929.png-28.9kB

     

    二、搭建SVN客户端

    1 使用svn客户端(windows版) 
    (1) 软件版本选择 
    推荐:TortoiseSVN-1.9.7.27907-x64-svn-1.9.7

    注意:32位系统要用32位软件版本

    参考链接,自行解压安装 
    链接:https://pan.baidu.com/s/1Ow6MXOuQyMZnVp9ytH6NwQ 
    提取码:33o9

    (2)svn客户端软件安装 
    一路yes即可

    (3)svn客户端软件的使用 
    先在本地创建一个目录,起名任意,比如data

    image_1ct2t31uj11f5dh91pn14021b30m.png-18.4kB

    鼠标右键点击data目录

    选择右键菜单里的SVN Checkout,出现下图:

    image_1ct2t5s2rqp31hso1dpm1uka1n1023.png-26.4kB

    如果连接不通,检查Linux虚拟机的iptables是否关闭。

    点击OK后,出现下图: 
    image_1ct2t9l3m1igi226c0q1ibi3l52g.png-35.8kB

    再次点击OK以后,结束。此时目录里多了一个隐藏的目录,表示此目录已经和svn服务器连通 
    image_1ct2tdnotm4v1feu1a1ir152kq3d.png-12.1kB

     
    1. 命令说明:
    2. 1SVN Checkout:相当于下载,第一次连接svn服务器的时候需要和服务器的对应存储目录进行数据同步,如果服务器的对应目录里有数据文件,那么就会下载到你的本地对应目录里。
    3. 2SVN Update:更新数据,检查服务器端svn存储目录里是否和本地svn存储目录数据不一致,如果不一致,那么下载改变或新增的部分到本地svn目录里。(不会删除本地目录内容)
    4. 3SVN Commit:提交数据到svn服务器端存储目录。本地svn存储目录会和服务器端存储目录进行比对校验。会把本地改变的部分和新增的部分同步上传至服务器端。

    2、svn客户端使用测试 
    (1)向windows的svn存储目录data里放一个空文件

    image_1ct2thqein3q10si1l4q1o6c16h53q.png-11.8kB

    (2)右键点击data目录,选择SVN Commit 
    image_1ct2tltipvp98a614og16g6gbm4k.png-51.8kB

    image_1ct2tnsev17um10a4jph144urdd61.png-38kB

    (3)打开本地data目录里的文件,随便写点内容后,再次进行SVN commit

    image_1ct2tqqbo1qlo173h19cfq3r1umj6e.png-54.7kB

    image_1ct2trdg1lr13nq4kqgc21dnp6r.png-34.2kB

    (4)直接从本地查看服务器端的数据内容 
    右键点击本地svn存储目录data,选择TortoiseSVN ===>Repo-browser后出现下图:

    image_1ct2u5ep77vh1p6c83h5c0hfc7o.png-57kB 
    双击文件可以直接远程打开文件,可以看到里面刚刚被修改后的内容已经更新至服务器端。

    (5)删除本地svn存储目录data里的文件,后选择SVN Update

    会发现,刚刚删除的文件又重新下载回来了。

    (6)继续删除本地svn存储目录data里的文件,后选择SVN Commit 
    image_1ct2u7isa1fc9gnk1c7sj91mmv85.png-77.8kB

    (7)再次查看服务器端存储目录里,发现文件已经被删除了

    image_1ct2ua5ko28ucr8129i1bcv103t9f.png-37.5kB

    3、SVN的管理命令(Linux)

     
     1 [root@jenkins /]# svn --help
     2 usage: svn <subcommand> [options] [args]
     3 Subversion command-line client, version 1.6.11.
     4 Type 'svn help <subcommand>' for help on a specific subcommand.
     5 Type 'svn --version' to see the program version and RA modules
     6 or 'svn --version --quiet' to see just the version number.
     7 Most subcommands take file and/or directory arguments, recursing
     8 on the directories. If no arguments are supplied to such a
     9 command, it recurses on the current directory (inclusive) by default.
    10 Available subcommands:
    11 add
    12 blame (praise, annotate, ann)
    13 cat
    14 changelist (cl)
    15 checkout (co) #下载数据
    16 cleanup
    17 commit (ci) #提交数据
    18 copy (cp)
    19 delete (del, remove, rm)
    20 diff (di)
    21 export
    22 help (?, h)
    23 import
    24 info
    25 list (ls) #显示服务器端内容
    26 lock
    27 log
    28 merge
    29 mergeinfo
    30 mkdir
    31 move (mv, rename, ren)
    32 propdel (pdel, pd)
    33 propedit (pedit, pe)
    34 propget (pget, pg)
    35 proplist (plist, pl)
    36 propset (pset, ps)
    37 resolve
    38 resolved
    39 revert
    40 status (stat, st)
    41 switch (sw)
    42 unlock
    43 update (up) #更新数据
    44 Subversion is a tool for version control.
    45 For additional information, see http://subversion.tigris.org/

    (1)从SVN库提取数据

    将文件checkout到本地目录 svn checkout(co) remotepath localpath

    image_1ct2v1ens4ke1ku81urn5ujcuo9s.png-20.8kB

     
    1. #下载服务器端数据到Linux本地目录
    2. [root@jenkins yunjisuan]# svn co svn://192.168.200.128/yunjisuan/ /root/yunjisuan/ --username=benet --password=123123

    image_1ct2v5crnrohtg219ensq6812a9.png-14.1kB

    (2)查看SVN版本库中的数据

    svn list file:///application/svndata/yunjisuan
    

    image_1ct2v8eiu1bno9bm136mm5goivam.png-9.3kB

    (3)提交数据到SVN版本库 
    以下是一次失败的提交 
    image_1ct2vtrp61qujriv1rh1tkbcptb3.png-41.8kB

    换账户重新Checkout 
    image_1ct3057o0aulgvvh0fqp71hrqbg.png-55.5kB

    image_1ct30c8dh136v1fumnp319ugmvqbt.png-38.9kB

    image_1ct30fjef1kess2210go159i1qq5ca.png-46kB

     

    三、SVN钩子脚本

    1 、钩子脚本简介

    1、钩子脚本的具体写法就是操作系统中shell脚本程序的写法,可根据自己的SVN所在的操作系统和shell程序进行相应的开发。 
    2、钩子脚本就是被某些版本库事件触发的程序,例如:创建新版本或修改未被版本控制的属性。每个钩子都能掌管足够的信息来了解发生了什么事件,操作对象是什么以及触发事件用户的账号。 
    3、根据钩子的输出或返回状态,钩子程序能够以某种方式控制该动作继续执行,停止或挂起。

    默认情况下,钩子的子目录中包含各种版本库钩子模板 
    image_1ct30nogr11r9qe61f2khsvt12cn.png-36.6kB

    1、对每种Subversion版本库支持的钩子都有一个模板,通过查看这些脚本的内容,你能看到是什么事件触发了脚本及如何给传脚本传递数据。 
    2、同时,这些模板也是如何使用这些脚本,结合Subversion支持的工具来完成有用任务的例子。 
    3、要实际安装一个可用的钩子,你需要在repos/hooks目录下安装一些与钩子同名(如start-commit或者post-commit)的可执行程序或脚本,注意,去掉模板的扩展名。

    重要提示:

    由于安全原因,Subversion版本库在一个空环境中执行钩子脚本就是没有任何环境变量,甚至没有$PATH或%PATH%。由于这个原因,许多管理员会感到很困惑,他们的钩子脚本手工运行时正常,可在Subversion中却不能运行。要注意,必须在你的钩子中设置好环境变量或为你的程序指定好绝对路径。

    2、SVN的hooks模板 
    (1)常用钩子脚本 
    image_1ct30qqepf971uam1vhj1dnf108fd4.png-29.9kB 
    (2)常用钩子脚本

    1、pre-revprop-change:在修改revision属性之前,执行该脚本 
    2、post-revprop-change:在修改revision属性之后,执行该脚本。因为修改稿已经完成,不可更改,因此本脚本的返回值被忽略(不过实际上的实现似乎是该脚本的正确执行与否影响属性修改) 
    3、pre-unlock:对文件进行解锁操作之前执行该脚本 4、post-unlock:对文件进行解锁操作之后执行该脚本 
    5、pre-lock:对文件进行加锁操作之前执行该脚本 6、post-lock:对文件进行加锁操作之后执行该脚本。

    (3)利用钩子脚本触发同步数据的注意事项 
    (1)一定要定义变量,主要是用过的命令的路径。因为SVN的考虑的安全问题,没有调用系统变量,如果手动执行是没有问题,但SVN自动执行就会无法执行了。

    (2)SVN的同步目录在 update之前一定要先checkout一份出来,还有这里一定要添加用户和密码。

    (3)加上了对前一个命令的判断,如果update的时候出了问题,程序没有退出的话还会继续同步代码到Web服务器上,这样会造成代码有问题。

    (4)建议最好记录日志,出错的时候可以很快的排错

    (5)最后是数据同步,rsync的相关参数一定要清楚。

    3、svn钩子生产应用场景举例

    pre-commit:

    限制上传文件扩展名及大小,控制提交要输入的信息等。

    post-commit:

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

    4、svn钩子生产应用实战 
    (1)、 rsync与svn钩子结合实现数据实时同步某企业小案例 
    建立同步WEB目录mkdir -p /data/www 
    (2)、将SVN中内容checkout到WEB目录一份。

     
     1 [root@jenkins ~]# svn checkout svn://192.168.200.128/yunjisuan /data/www/ --username=yunjisuan --password=123123
     2 A /data/www/111
     3 A /data/www/120
     4 A /data/www/112
     5 A /data/www/113
     6 A /data/www/114
     7 A /data/www/115
     8 A /data/www/116
     9 A /data/www/117
    10 A /data/www/118
    11 A /data/www/119
    12 A /data/www/aaa.txt.txt
    13 Checked out revision 6.
    14 [root@jenkins ~]# ll /data/www/
    15 total 44
    16 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 111
    17 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 112
    18 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 113
    19 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 114
    20 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 115
    21 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 116
    22 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 117
    23 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 118
    24 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 119
    25 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 120
    26 -rw-r--r--. 1 root root 7 Nov 25 06:15 aaa.txt.txt

    (3)、制作钩子脚本,post-commit

     
     1 cd /application/svndata/yunjisuan/hooks/
     2 cp post-commit.tmpl post-commit #复制模板一份
     3 vim post-commit #修改post-commit脚本
     4 REPOS="$1" #传参(未用上)
     5 REV="$2" #传参(未用上)
     6 SvnIP="192.168.200.128" #svn服务端的IP地址
     7 ProjectName="yunjisuan" #svn服务端的项目库名称
     8 UserName="yunjisuan" #账户姓名
     9 PassWord="123123" #账户密码
    10 LocalPath="/data/www" #位于svn本地的共享目录
    11 SVN=/usr/bin/svn #svn命令的绝对路径
    12 export LC_CTYPE="en_US.UTF-8" #中文字符集支持
    13 export LC_ALL=
    14 if [ ! -d ${LocalPath} ];then
    15 mkdir -p ${LocalPaht}
    16 $SVN checkout svn://${SvnIP}/${ProjectName} ${LocalPath} --username=${UserName} --password=${PassWord} #新创建目录需要先经过checkout才能update
    17 else
    18 $SVN update --username yunjisuan --password 123123 /data/www #更新共享目录内容
    19 fi
    20 if [ $? -eq 0 ];then
    21 /usr/bin/rsync -az --delete /data/www /tmp/ #数据同步推送到本地/tmp目录下(生产环境可以直接同步推送到Web测试服务器)
    22 fi

    (4)进行钩子脚本同步测试 
    删除之前的测试记录 
    rm -rf /data/www/ 
    chmod 700 post-commit 给钩子脚本可执行权限

    特别提示: 当用户通过svn更新钩子post-commit所在的项目库时,在更新完毕之后会自动触发钩子脚本

    模拟更新项目库版本 
    image_1ct34grms1dbq1a2112i813t71k1qdu.png-46.1kB

    image_1ct34hafbgrt1abe1sukch16dheb.png-37.7kB

    image_1ct34i7ed1n6oaigip1181vs1bf8.png-97.7kB

  • 相关阅读:
    等待通知--wait notify
    表单重复提交与解决
    Cookie Session 与Token
    springMVC实现登陆
    第11章 AOF持久化
    第10章 RDB持久化
    MyBatis动态SQL
    第4章 网络层
    第9章 数据库
    代理设计模式
  • 原文地址:https://www.cnblogs.com/mendermi/p/10014138.html
Copyright © 2020-2023  润新知