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" ]; thenecho -e "${RED}错误:请指定要处理的根目录路径!${NC}"echo -e "使用方法:$0 /path/to/your/projects"exit 1
fiSEARCH_ROOT="$1"# 检查svn命令是否存在
if ! command -v svn &> /dev/null; thenecho -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" ]; thenAUTH_PARAMS="$AUTH_PARAMS --trust-server-cert"
fiecho -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; dowc_root=$(dirname "$svn_dir")echo -e "处理工作副本: ${YELLOW}${wc_root}${NC}"# 获取当前完整URLold_full_url=$(svn info "$wc_root" 2>/dev/null | grep '^URL:' | awk '{print $2}')if [ -z "$old_full_url" ]; thenecho -e "${RED}✗ 不是有效的SVN工作副本${NC}"echo "----------------------------------------"continuefi# 构建新URL(保留路径部分)new_full_url="${old_full_url//${OLD_DOMAIN}/${NEW_DOMAIN}}"# 执行relocatesvn relocate "$old_full_url" "$new_full_url" "$wc_root" $AUTH_PARAMSif [ $? -eq 0 ]; thenecho -e "${GREEN}✓ 成功修改为: ${new_full_url}${NC}"# 测试新URL是否可用svn info "$wc_root" $AUTH_PARAMS >/dev/null 2>&1if [ $? -ne 0 ]; thenecho -e "${RED}⚠ 警告:新URL验证失败,请检查权限${NC}"fielseecho -e "${RED}✗ 修改失败${NC}"fiecho "----------------------------------------"
doneecho -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
替换为你的实际项目根目录)