一个SVN管理的打包两个版本之间差异的脚本
#!/bin/bash
# 获取脚本所在目录的路径
SCRIPT_DIR=$(dirname "$0")
# SVN仓库的URL
REPO_URL=""
# 起始和结束的修订版本号
REV_START=""
REV_END=""
# SVN 用户名和密码(为了安全考虑,请通过环境变量或其他安全方式提供这些信息)
SVN_USERNAME=""
SVN_PASSWORD=""
# 临时目录,用于存放导出的文件
TEMP_DIR="$SCRIPT_DIR/svn_diffs_temp"
# 打包文件的名称,现在包括脚本所在目录的路径
PACKAGE_NAME="$SCRIPT_DIR/svn_diffs_${REV_START}_to_${REV_END}.tar.gz"
# 创建临时目录
mkdir -p $TEMP_DIR
# 获取两个修订版本之间差异文件的列表,并循环处理每个文件
svn diff -r ${REV_START}:${REV_END} --summarize $REPO_URL --username $SVN_USERNAME --password $SVN_PASSWORD | while read line; do
# 提取文件状态和路径
FILE_STATUS=$(echo $line | awk '{print $1}')
FILE_PATH=$(echo $line | awk '{print $2}')
# 检查文件状态,只处理已修改(M)或已添加(A)的文件
if [[ "$FILE_STATUS" == "M" || "$FILE_STATUS" == "A" ]]; then
# 计算文件的相对路径
RELATIVE_PATH=${FILE_PATH#$REPO_URL/}
# 创建文件的目标目录
mkdir -p $TEMP_DIR/$(dirname $RELATIVE_PATH)
# 导出文件到目标目录,保留路径结构
svn export ${FILE_PATH}@${REV_END} $TEMP_DIR/$RELATIVE_PATH --username $SVN_USERNAME --password $SVN_PASSWORD
fi
done
# 将临时目录中的文件打包
tar -czvf $PACKAGE_NAME -C $TEMP_DIR .
# 清理临时目录
rm -rf $TEMP_DIR
echo "差异包已创建: $PACKAGE_NAME"