项目实施, 发布代码工作也是其繁琐的(当然小型项目直接可以通过FTP方式上传),但在团队合作开发中,版本控制显得由为重要,如项目分支,回滚代码,这在简单的FTP工作方式没法做到,但常用的版本控制svn服务器,Git版本控制能很好解决这些问题。linux下svn常用命令也不复杂,现自己动手写了一个基于bash方式进行自动发布导出svn两版本之间的文件shell脚本. 来进行代码发布.分享给大家,希望可以能大家在发布代码上带来一些方便.


#!/bin/sh
#导出指定版本之间的差异文件 如100到200之间的差异则导出100(不包括)-200(包括)的所有修改

SVN_URL="https://svn.anepx.com/project1"

if [ $# -eq 0 ] ; then
  echo "You must useage like $0 old_version1(不包括) new_version(包括)"
  exit 1
fi

if [ $1 -gt $2 ] ; then
  echo "You must useage like $0 old_version1(不包括) new_version(包括)"
  exit 1
fi

OLD_VERSION=$1
NEW_VERSION=$2

#导出的目标路径
WORK_PATH="/usr/local/apache2.2/htdocs/www.php512.com"

echo "开始分析版本差异..."
DIFF_URL="svn diff -r ${OLD_VERSION}:${NEW_VERSION} --summarize --username svn用户名 --password svn密码 ${SVN_URL}"
echo ${DIFF_URL}

if test ! -e "${WORK_PATH}"; then
  mkdir -p ${WORK_PATH}
fi
#echo ${DIFF_URL}|sh >${WORK_PATH}_diff.txt

DIFF_NUM=`${DIFF_URL} |wc -l`
if [ ${DIFF_NUM} -ne 0 ]; then
  echo "差异文件共${DIFF_NUM}个,准备导出."
  DIFF_LIST=`${DIFF_URL}`
  #echo ${DIFF_LIST}
  NUM=0
  SKIP=0
  for FIELD in ${DIFF_LIST} ; do
    #长度小于3(A、M、D、AM即增加且修改)即是更新标识,否则为url
    if [ ${#FIELD} -lt 3 ]; then
      let NUM+=1
      SKIP=0
      if [ "${FIELD}" == "D" ]; then
        #下一个应该跳过
        SKIP=1
      fi
      continue
    fi

    #若为删除文件则不必导出
    if [ ${SKIP} -eq 1 ]; then
      echo ${NUM}.'是删除操作,跳过:'${FIELD}
      continue
    fi

    #替换得到相对路径
    DIFF_FILE=${FIELD//${SVN_URL}/}
    echo ${NUM}.' '${DIFF_FILE}

    FILE_NAME=`basename ${DIFF_FILE}`
    FOLDER_NAME=`dirname ${DIFF_FILE}`
    FOLDER_PATH="${WORK_PATH}${FOLDER_NAME}"
    #echo ${FILE_NAME}' '${FOLDER_NAME}' '${FOLDER_PATH}

    if test ! -e "${FOLDER_PATH}"; then
       mkdir -p ${FOLDER_PATH}
    fi

    CMD="svn export -r ${NEW_VERSION} '${SVN_URL}${DIFF_FILE}'  '${FOLDER_PATH}/${FILE_NAME}' --force"
    #echo ${CMD}
    #echo ${NUM}.' '
    echo ${CMD}|sh
  done
  echo -e "版本号:"${OLD_VERSION}"->"${NEW_VERSION} "\t时间:" $(date +"%Y-%m-%d %H:%M:%S")>> /home/svn/push_logs.txt
  echo "完成"
else
  echo "版本间没有差异"
fi

将文件保存到/bin/publish.sh,并为此文件添加可执行权限:

chmod +x /bin/publish.sh

运行命令:

publish.sh 1 100 

此命令作用是将svn版本库中版本号为2~100之间的版本文件到目标路径。/usr/local/apache2.2/htdocs/www.php512.com

发表评论

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


*