在Linux上实现SVN增量导出

SVN 快速导出脚本

公司的工作流程中, 提交一个版本后, 需要将修改的内容按路径导出一份增量包到公司服务器. WIN 上的 TortoiseSVN 直接有这个功能, 但Linux 上的各个SVN客户端却缺少这个功能.

没办法, 看看脚本怎么写吧. 我参考了一个网友的脚本

在他的基础上增加功能:

  • 配置导入导出目录
  • 按日期生成导出目录
  • 多个版本号合并导出

最终脚本如下:

#!/bin/bash
RESPOSITORY="$HOME/<你的项目根目录>"
TARGET="$HOME/<要导出到什么地方>"
tmp=${TARGET}$(date '+%Y%m%d')
args=("$@")
IFS=$'\n' args=($(sort -r <<<"${args[*]}"))
unset IFS

# set target dir
i=1
while [ -d $tmp ]; do
  tmp=${tmp//-*/}
  tmp=$tmp"-${i}"
  ((i++))
done
TARGET=$tmp'/'
echo "export to ${TARGET}"

# begin
for arg in "${args[@]}"
do
  # Use commandsubstitution will lose \n
  tmp=$(svn log ${RESPOSITORY} -r${arg}:0000 -l2 | grep -o 'r[[:digit:]]*')
  to=$(echo $tmp | cut -d ' ' -f1)
  from=$(echo $tmp | cut -d ' ' -f2)
  echo $from"-"$to":"
  for line in $(svn diff --summarize -r$from:$to $RESPOSITORY | grep "^[AM]")
  do
    if [ $line != "A" ] && [ $line != "AM" ] && [ $line != "M" ]; then
      # use sed to remove the repository from the full repo and filename
      filename=`echo "$line" |sed "s|$RESPOSITORY||g"`
      # don't export if it's a directory we've already created
      if [ ! -d $TARGET$filename ]; then
        directory=`dirname $filename`
        mkdir -p $TARGET$directory
        #echo 'svn exprot -r '$to' '$line' '$TARGET$filename
        echo 'exporting '$line
        svn export -r $to $line $TARGET$filename
      fi
    fi
  done
done

现在只要

svn-fast-export 6774 6780 6799 

就可以将 6774 6780 6799 三个分支导出到 TARGET 路径下的以当天日期命名的目录了

发表评论

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