svn域名更换,批量修改项目svn地址(linux)

1、创建脚本 svn_batch_relocate_auto.sh

#!/bin/bash

# SVN批量域名修改脚本(自动认证版)
# 使用方法:./svn_batch_relocate_auto.sh /path/to/root/dir

# 配置区(请修改以下变量)
OLD_DOMAIN="old.svn.domain.com"         # 旧域名(不含协议)
NEW_DOMAIN="new.svn.domain.com"      # 新域名(不含协议)
PROTOCOL="svn"                       # 协议类型(svn/http/https)
SVN_USER="your_username"             # SVN用户名
SVN_PASS="your_password"             # SVN密码
SVN_TRUST_CERT="yes"                 # 是否信任证书(https时有效)

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

# 检查参数
if [ -z "$1" ]; then
    echo -e "${RED}错误:请指定要处理的根目录路径!${NC}"
    echo -e "使用方法:$0 /path/to/your/projects"
    exit 1
fi

SEARCH_ROOT="$1"

# 检查svn命令是否存在
if ! command -v svn &> /dev/null; then
    echo -e "${RED}错误:未找到 svn 命令,请确保已安装Subversion!${NC}"
    exit 1
fi

# 准备认证参数
AUTH_PARAMS="--non-interactive --username $SVN_USER --password $SVN_PASS"
if [ "$PROTOCOL" = "https" ] && [ "$SVN_TRUST_CERT" = "yes" ]; then
    AUTH_PARAMS="$AUTH_PARAMS --trust-server-cert"
fi

echo -e "${YELLOW}开始批量修改SVN工作副本域名...${NC}"
echo -e "旧域名: ${PROTOCOL}://${OLD_DOMAIN}"
echo -e "新域名: ${PROTOCOL}://${NEW_DOMAIN}"
echo -e "搜索根目录: ${SEARCH_ROOT}"
echo -e "----------------------------------------"

# 查找所有.svn目录并处理
find "$SEARCH_ROOT" -type d -name ".svn" | while read svn_dir; do
    wc_root=$(dirname "$svn_dir")
    echo -e "处理工作副本: ${YELLOW}${wc_root}${NC}"
    
    # 获取当前完整URL
    old_full_url=$(svn info "$wc_root" 2>/dev/null | grep '^URL:' | awk '{print $2}')
    
    if [ -z "$old_full_url" ]; then
        echo -e "${RED}✗ 不是有效的SVN工作副本${NC}"
        echo "----------------------------------------"
        continue
    fi
    
    # 构建新URL(保留路径部分)
    new_full_url="${old_full_url//${OLD_DOMAIN}/${NEW_DOMAIN}}"
    
    # 执行relocate
    svn relocate "$old_full_url" "$new_full_url" "$wc_root" $AUTH_PARAMS
    
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}✓ 成功修改为: ${new_full_url}${NC}"
        # 测试新URL是否可用
        svn info "$wc_root" $AUTH_PARAMS >/dev/null 2>&1
        if [ $? -ne 0 ]; then
            echo -e "${RED}⚠ 警告:新URL验证失败,请检查权限${NC}"
        fi
    else
        echo -e "${RED}✗ 修改失败${NC}"
    fi
    
    echo "----------------------------------------"
done

echo -e "${GREEN}批量修改完成!${NC}"

2、赋权

chmod -R 777 svn_batch_relocate_auto.sh

3、执行

./svn_batch_relocate.sh /path/to/your/projects

(将 /path/to/your/projects 替换为你的实际项目根目录) 

你可能感兴趣的:(svn,linux,运维)