#!/bin/sh #導出指定版本之間的差異文件 如100到200之間的差異則導出100(不包括)-200(包括)的所有修改 SVN_URL="svn://192.168.1.127/porject" 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="/app/htdocs/project" echo "開始分析版本差異..." DIFF_URL="svn diff -r ${OLD_VERSION}:${NEW_VERSION} --summarize --username bug --password 123456 ${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")>> /app/svndata/push_logs.txt echo "完成" else echo "版本間沒有差異" fi
publish.sh 用法
比較兩個版本差異
publish.sh old_version new_version
publish.sh 2055 2056