Mac境遇下svn的利用

3 svn diff

 

我解释下指令的意思:将服务器中mycode仓库的内容下载到/Users/apple/Documents/code目录中

# Setting cdm path is used to store client software
host_dir=”/var/hostdir”
# Statement the file is used to store the size of cdm folder size
fsrecord=”.r”
# To synchronize the target machine ip
client_ip=”192.168.0.2″
# To synchronize the target machine directory
client_dir=”/var/clientdir”

svn info trunk/| awk -F ‘:’ ‘{ if($1 ~ /^Revision$/) {print $2} }’ | tr
-d ” “

svn提交时出现(413 Request Entity Too Large)错误解决方法

 

在nginx的server配置中增加

client_max_body_size 100M;

linux多实例apache+svn部署

1.首先创建多实例目录

svnadmin create /svn/psm/

svnadmin create /svn/sh/       

2.赋予权限:

chmod -R 777 /svn/psm      /svn/sh

chown -R apache.apache   /svn/psm   /svn/sh

3.修改用户权限:

vim /svn/psm/conf/svnserve.conf  

anon-access = none  

auth-access = write  

4.整合Apache

vi /etc/httpd/conf.d/subversion.conf 加入以下:

多少个实例就添加几个location

<Location /psm>  

   DAV svn  

 SVNPath /svn/psm                  

  AuthType Basic  

   AuthName “svn”   

  AuthUserFile /var/www/svn/project/conf/passwd  

  Require valid-user  

</Location> 

5.启动svn

svnserver -d –listen-port 3690 -r /svn/sh

svnserver -d –listen-port 3691 -r /svn/psm

6.配置用户信息

htpasswd -c passwd qinyj

导入项目: svn import /www/download/psm_server -m “psm_server”
 –force-log

       svn import /www/downloadsh -m “sh”
–force-log

svn co    psm   #checkout代码。

svn up svn目录 –username aaa  svn代码目录。
 #更新代码库。会根据隐藏文件.svn
与服务器更新代码,如果本地工作目录没有会Add。

svn ci -m “备注信息” –username aaa
svn代码目录。#提交到代码库。或者到svn目录里面svn ci -m “备注”
–username aaa 

7.更新提交脚本

[ ! -d /code/wordpress ] && mkdir -p /code/wordpress && svn co
/code/wordpress && exit 1 ||
cd /code/wordpress #检查有没有创建工作目录
cd /code/wordpress #进入到工作目录
update_svn()
{
svn update –username ${svn_name}
if [ $? -ne 0 ];then
echo “svn update failed”
exit 1
fi
VERSION=`svn info |awk -F”[ ]+” ‘/Revision/{print $2}’`
TEMP=”`date +%Y%m%d`${VERSION}”
NUM=`echo ${TEMP}+1|bc`
echo -e “####################nsvn update
complete”
}

svn_commit ()
{
VERSION=`svn info |awk -F”[ ]+” ‘/Revision/{print $2}’`
echo “cd /code/wordpress”
cd /code/wordpress
[ ! -d /root/shell_log ] && mkdir -p /root/shell_log
mkdir -p /root/shell_log/${VERSION}
svn status |awk ‘{if($1==”!”) print $0}’ |cut -b 9-
>/root/shell_log/${VERSION}/svn_del.log
svn status |awk ‘{if($1==”?”) print $0}’ |cut -b 9-
>/root/shell_log/${VERSION}/svn_add.log
svn status |awk ‘{if($1==”M”) print $0}’ |cut -b 9-
>/root/shell_log/${VERSION}/svn_change.log
while read line ;do svn delete “$line” ;done
</root/shell_log/${VERSION}/svn_del.log && echo “svn delete
complete”
while read line ;do svn add “$line” ;done
</root/shell_log/${VERSION}/svn_add.log && echo “svn add
complete”
svn commit -m “`date +%Y%m%d%H%M%S`” –username ${svn_name} && echo
“svn commit complete”
#删除认证文件
rm -f /root/.subversion/auth/svn.simple/*
}

C# code

  1. refresh crontab

获取某次修订版的提交内容。-v显示具体提交修改的文件列表,-r指定版本号。

指令执行成功后,会发现硬盘上多了个/Users/apple/svn/mycode目录,目录结构如下:

  1. scp同步文件脚本 //syntest.sh

#!/usr/bin/bash
 
repo=$1
 
#Save old revision
old_rev=` svn info $repo |
            awk -F ‘:’ ‘{ if($1 ~ /^Revision$/) {print $2} }’ |
            tr -d ” ” `
echo Old revision: $old_rev
 
#Update code
svn update $repo
 
#Save new revision before update
new_rev=` svn info $repo |
              awk -F ‘:’ ‘{ if($1 ~ /^Revision$/){print $2} }’ |
              tr -d ” ” `
echo New revision: $new_rev
 
#Generate diff report
if [ $old_rev == $new_rev ]; then
  echo No revision commited.
else
        svnlog -v -r $old_rev:$new_rev $repo
  svn diff -r $old_rev:$new_rev $repo
fi

2、记得写注释,否则系统不会识别命令的。

 1.) 将syntest.sh拷贝到/etc目录下

4 svn checkout/update

4.启动svn服务器
前面配置了这么多,最关键还是看能否正常启动服务器,若启动不来,前面做再多工作也是徒劳。

# Current file folder size
new_folder_size=”$(du -sh $host_dir |awk ‘{print $1}’)”
# Read the size of the folder and remove character ‘M’
if [ ! -f $fsrecord ]
then
   echo “0M” > $fsrecord
fi
old_folder_size=”$(cat $fsrecord|tr -d ‘M’)”
# Remove character ‘M’
temp_new=”$(echo $new_folder_size|tr -d ‘M’)”

 获得更新前后的版本号间的提交记录,以及修改内容比较。

使用[/]代表svn服务器中的所有资源库

#!/bin/bash

取当前本地代码的版本号

 

# Compare file folder size
if [ “$temp_new” != “$old_folder_size” ]
then
   scp -r $host_dir $client_ip:$client_dir
   echo “”
   echo “—–The folder has been synchronized success!—–“
   # Write the latest file folder size
   echo $new_folder_size > $fsrecord
else
   echo “—–The folder has not been changed, so it does not need to
synchronize.—–“
fi

比较两个版本号间的差别。

3.提交更改过的代码到服务器
在步骤2中已经将服务器端的代码都下载到/Users/apple/Documents/code目录中,现在修改下里面的一些代码,然后提交这些修改到服务器

    svcadm refresh cron

获取当前本地代码库的基本信息。

[/]
@topgroup=rw上面的配置说明topgroup这个组中的所有用户对所有资源库都有读写(rw)权限,组名前面要用@

 2.) 编辑crontab,文件在/var/spool/cron/crontabs下

图片 1

一、创建代码仓库,用来存储客户端所上传的代码
我先在/User/apple目录下新建一个svn目录,以后可以在svn目录下创建多个仓库目录

  1. 为scp自动拷贝生成不用输入密码的密匙

更新代码svn update trunk/

 

  1. 用crontab定时运行脚本。

1 svn info

2.打开passwd,在[users]下面添加帐号和密码
[users]
mj=123
jj=456
帐号是mj,密码是123

      比如:每分钟运行一次

检出代码svn checkout

[groups]
topgroup=mj,jj
说明mj和jj都是属于topgroup这个组的,接下来再进行权限配置。

 参考《ssh(scp)自动登录的几种方法》

5 应用例子

我解释下指令的意思:将/Users/apple/Documents/eclipse_workspace/weibo中的所有内容,上传到服务器mycode仓库的weibo目录下,后面双引号中的”初始化导入”是注释

图片 2

2 svn log

这里列出一大堆svn指令,后面括号中的内容的一般代表着指令的简称,比如我们可以用svn ci代替svn commit,用svn co代替svn checkout

      0-59 * * * * /etc/syntest.sh  //*/5    每5分钟1次  */20   
每20分钟1次   在Linux下可以,但是在Solaris下不支持

发表评论

电子邮件地址不会被公开。 必填项已用*标注