zoukankan      html  css  js  c++  java
  • linux搭建svn服务并手动同步代码到web目录和自动更新

    1.安装svn服务端

    yum -y install subversion

    2.查看安装路径等信息

    rpm -ql subversion

    3.查看svn帮助信息

    svn help

    4.创建svn版本库目录(这是个大库,里面用svnadmin创建的才是各个项目的库)

    mkdir /home/svnDB

    5.创建版本库(项目)

    mkdir /home/svnDB/test/

    svnadmin create /home/svnDB/test/

    6.配置版本库

    进入/home/svnDB/test/conf,里面有三个文件

    authz文件是权限控制文件

    passwd是帐号密码文件

    svnserve.conf SVN服务配置文件

    (1)在passwd文件的[users]块中添加用户名和密码:账号=密码,例如username=password

    (2)在authz的末尾增加

    [/]

    username=rw

    (*=)这个是其他的都没有读写权限,前面的才有

    (3)在svnserve.conf

    去掉四个个的前面的#号,如下

    anon-access = none(匿名用户设置为none,这样才能看到日志信息,否则日志显示nodate)

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

    password-db = passwd #使用passwd作为账号文件

    authz-db = authz #使用authz作为权限文件

    ps:注意,前面不能有空格

    7.启动svn服务,这里启动大仓库

    svnserve -d -r /home/svnDB

    8.客户端安装这里略过,直接进入服务端的更新到web目录

    svn co svn://你的ip 你想放在那个目录(这样的创建到web目录如果更新可以在那个目录下直接svn update,但是有svn的隐藏文件)

    svn export svn://你的ip 你想放在哪个目录(这样的web目录没有svn隐藏文件,但是不能直接用svn update更新,推荐上面的)

    9.使用钩子进行svn自动更新到web目录

    (1)、cd  /home/svnDB/test/hooks/ 

    (2)、cp cp post-commit.tmpl post-commit (复制这份模板文件,因为svn将要执行的是post-commit文件)

    (3)、vim post-commit 

    将最后面几行删除

    REPOS="$1"
    REV="$2"
    mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf

    ============================================================

    然后加上自己将要执行的同步的命令

    export LANG=zh_CN.UTF-8  #(这句话比较重要,如果客户端跟服务器编码不一样会出现同步失败)
    WEB=你的web目录  #(将要同步过去的web项目路径)
    /usr/bin/svn update $WEB  #(/usr/bin/svn代表你的svn服务文件地址 如果是通过yum安装的话,或者已经注册了svn服务,则可以直接使用svn,不需要输入全路径)

    wq!保存退出,此时已经完成更新命令

    ===========================================================================================================================

    设置post-commit文件可以执行权限(若不设置则会出现commit false 255错误)

    chmod  a+x  post-commit  (或者chmod  777 post-commit)

    10.将svn设置开机启动

    找个地方写个脚本,svnserve命令最好用绝对路径,可用which svnserve查找,如我的在/usr/bin/svnserve

    脚本内容如:

    #!/bin/bash

    /usr/bin/svnserve -d -r /home/svnDB

    保存之后加入到开机启动文件那里

    11.设置分组和目录权限

    我们开发的时候是多人,多人可能属于一个组,有些组权限大,有些组权限小

    打开配置文件authz,在[groups]区写上分组信息,如

    g48=akb,ske,nmb

    other=mike,tom

    然后权限配置

    [/]

    @g48=rw(以@开头就是指这个组,这里/指所有的仓库的所有目录都有rw权限)

    [test:/controllers]

    @other=rw(这里是test仓库下的controllers文件夹有rw权限,这个组checkout项目的时候地址就是svn://ip地址/test/controllers)

    设置这些权限之后还要对应的去passwd文件设置帐号密码,然后重启svn

    12.开启修改日志权限

    只要将文件hooks目录下的pre-revprop-change.tmpl改名为pre-revprop-change,并加上执行权限即可。

    不过这样所有人都可以修改,还能修改其他人的日志

    1. 创建svn目录
      mkdir /home/svn   //在home目录下创建svn 文件夹
      
      svnadmin create /home/svn/test //创建svn版本仓库 test

      创建完毕以后,在svn目录下你会看到test目录,test目录详细详细如下


      下面是这些目录的详细讲解

      在本文章主要是配置svn的信息以及如何同步代码,所以涉及的目录只有conf目录以及hooks目录,下面,我们开始讲解如何配置svn

      3.配置svn的基本信息

    1. cd ./conf //进入配置文件夹

      
      authz  文件是创建svn组和组用户的权限
      passwd  设置组中用户的账号和密码 
      svnserve.conf 配置版本库信息和用户文件和用户密码文件的路径、版本库路径
      (如果是多个仓库通过相同权限,账号和密码控制,可以将authz,passwd文件放到svn目录下)

      (1)authz 配置svn组和组用户的权限

    [group]
    test = user1,user2 //创建test用户组,并添加user1 user2用户
    
    [/]    //指定根目录先的权限
    @test = rw  //设置test组的权限为可读可写

      (2)passwd 配置用户密码

    [users]
    
    user1 = 12345678   //用户名就是组添加成员是的用户     
    user2 = 12345677

      (3)svnserve.conf 配置版本库信息和用户文件和用户密码文件的路径、版本库路径

    [general]
    anon-access = none        //其他人不可读取
    auth-access = write         //设置authz中用户的权限为可写
    password-db = passwd     //指向自己passwd文件
    authz-db = authz             //指向authz文件
    realm = /home/svn/test

      以上就是配置svn的权限,用户账户密码以及仓库路径

      此时,你需要将svn重启,重启方式以下

    ps -ax | grep svn    //查出svn进程
    
    kill -9 ******    //通过kill -9方式杀死进程 *****是对应的pid
    
    svnserve -d -r /home/svn //启动svn服务,当然你如果是想启动具体的仓库,可以将路径写的更加详细一点

      4.使用post-commit 实现同步代码

      代码同步需要使用到hooks文件目录下的post-commit勾子文件,在hooks下很多tmpl文件,这些文件都是勾子的模板来的,
      如果需要使用的时候copy 一份去掉.tmpl后缀便可使用

      (1)生成一个新的有效的勾子文件post-commit

    cp post-commit.tpml post-commit
    chmod 777 post-commit //设置post-commit 文件的权限 切记这步一定不可漏,不然后期运行时会报错

      这样就会生成一个有效的post-commit 文件

      (2)同步代码操作

    #!/bin/sh
    export LANG=en_US.UTF-8
    SVN_PATH=/usr/bin/svn
    WEB_PATH=/data/wwwroot/default/test    //test目录就行你的项目的目录
    $SVN_PATH update $WEB_PATH --username user1 --password 12345678    //切记--username --password 是两个-

      (3)进入服务器目录,将项目checkout 出来

    svn co svn://localhost/test/  /data/wwwroot/default/test --username user1 --password 12345678

     这样子你的代码同步功能已经实现了

     5.客户端使用

      你只需下载个 tortoiseSVN 小乌龟然后将test仓库拉取下来,然后将代码放入仓库文件夹中,通过添加文件方式add 后再commit ,你的项目就会同步到服务器中
      

     6.我遇到的那些错误

      1.首先客户端连接svn服务器错误,之所以会连接失败,是因为我的防火墙并没有开启3690(svn默认端口),你只需开启即可
      不会请看这个链接 http://www.linuxidc.com/Linux/2012-09/70785.htm

      2.同步失败  是因为post-commit文件的权限原因,你只需将权限设置大于755即可

      3.提示**** is a direcitory /usr/bin/svn你把这个搞错了,他不是一个目录,是svn的路径

  • 相关阅读:
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 390 消除游戏
    Java实现 LeetCode 390 消除游戏
  • 原文地址:https://www.cnblogs.com/klb561/p/9901411.html
Copyright © 2011-2022 走看看