SVN 打包两个版本之间差异的脚本

2024/03/21 15:38 下午 posted in  服务器

一个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"