You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将SVN服务器仓库每日备份至另一台PC?

靠谱的SVN每日自动跨PC备份方案

我来给你梳理一套实操性强的方案,既能继续用现有PC当SVN服务器,又能把仓库每日自动备份到另一台PC,全程不用手动操心:

第一步:编写SVN仓库的本地备份脚本

首先得把SVN仓库完整备份到本地临时目录,推荐用svnadmin hotcopy工具——它支持在线热备份,不用停SVN服务,特别适合你的场景。

如果你用的是Windows服务器:

新建一个svn_backup.bat脚本,内容如下:

@echo off
set "SVN_REPO_PATH=D:\svn\your_repo"  # 替换成你的SVN仓库实际路径
set "LOCAL_BACKUP_DIR=D:\svn_backups\temp"  # 本地临时备份目录
set "DATE=%date:~0,4%%date:~5,2%%date:~8,2%"  # 生成YYYYMMDD格式的日期

:: 创建临时备份目录
if not exist "%LOCAL_BACKUP_DIR%" mkdir "%LOCAL_BACKUP_DIR%"

:: 执行热备份
svnadmin hotcopy "%SVN_REPO_PATH%" "%LOCAL_BACKUP_DIR%\repo_backup_%DATE%"

:: 压缩备份文件(可选,节省空间)
7z a -tzip "%LOCAL_BACKUP_DIR%\repo_backup_%DATE%.zip" "%LOCAL_BACKUP_DIR%\repo_backup_%DATE%"
rd /s /q "%LOCAL_BACKUP_DIR%\repo_backup_%DATE%"  # 删除未压缩的目录

注意:如果用压缩的话,得先安装7-Zip,把它的路径加到系统环境变量里

如果你用的是Linux服务器:

新建一个svn_backup.sh脚本,内容如下:

#!/bin/bash
SVN_REPO_PATH="/var/svn/your_repo"  # 替换成你的SVN仓库实际路径
LOCAL_BACKUP_DIR="/var/svn_backups/temp"
DATE=$(date +%Y%m%d)

# 创建临时备份目录
mkdir -p $LOCAL_BACKUP_DIR

# 执行热备份
svnadmin hotcopy $SVN_REPO_PATH $LOCAL_BACKUP_DIR/repo_backup_$DATE

# 压缩备份文件
tar -zcvf $LOCAL_BACKUP_DIR/repo_backup_$DATE.tar.gz $LOCAL_BACKUP_DIR/repo_backup_$DATE
rm -rf $LOCAL_BACKUP_DIR/repo_backup_$DATE

然后给脚本加执行权限:chmod +x svn_backup.sh

第二步:把备份文件同步到另一台PC

接下来要把本地备份好的文件传到目标PC,分两种系统场景:

Windows到Windows:

  1. 在目标PC上新建一个文件夹,右键选择「属性」→「共享」,开启共享权限,设置允许SVN服务器的PC访问(最好用特定账号,别开匿名)
  2. 在SVN服务器PC上,把目标PC的共享文件夹映射成网络驱动器(比如Z:盘)
  3. 修改刚才的svn_backup.bat,最后加一行:
copy "%LOCAL_BACKUP_DIR%\repo_backup_%DATE%.zip" "Z:\svn_backups\"

或者用robocopy替代copy,它更稳定,支持断点续传:robocopy "%LOCAL_BACKUP_DIR%" "Z:\svn_backups" "repo_backup_%DATE%.zip" /R:3 /W:5

Linux到Linux/Windows:

  • 如果目标是Linux:用rsync配合SSH免密登录,在备份脚本最后加一行:
rsync -avz $LOCAL_BACKUP_DIR/repo_backup_$DATE.tar.gz user@目标PC_IP:/path/to/backup/folder/

先在SVN服务器上生成SSH密钥,传到目标PC,实现免密登录(ssh-keygen然后ssh-copy-id user@目标PC_IP

  • 如果目标是Windows:可以在目标PC开启SFTP服务,用lftp或者pscp命令把备份文件传过去,或者挂载Windows共享目录到Linux上再复制。

第三步:设置定时自动执行

最后一步让脚本每天自动跑,不用手动操作:

Windows系统:

  1. 打开「任务计划程序」→「创建基本任务」
  2. 任务名称填「SVN每日备份」,触发器选「每天」,设置你想要的备份时间(比如凌晨2点,服务器负载低的时候)
  3. 操作选「启动程序」,程序或脚本选刚才的svn_backup.bat,起始位置填脚本所在的文件夹路径
  4. 勾选「不管用户是否登录都要运行」,并设置最高权限,避免权限问题

Linux系统:

  1. 编辑crontab:crontab -e
  2. 加一行定时任务,比如每天凌晨2点执行:
0 2 * * * /path/to/svn_backup.sh >> /var/log/svn_backup.log 2>&1

这行的意思是每天2点0分执行脚本,把日志输出到svn_backup.log里,方便后续排查问题

额外的安全小建议

  • 定期检查备份日志,确保脚本没有报错
  • 每月做一次恢复测试:把备份文件恢复到测试环境,确认仓库能正常使用
  • 给备份文件设置保留期限,比如只保留最近7天的备份,避免占满磁盘(可以在脚本里加删除旧文件的逻辑,比如Windows用forfiles,Linux用find命令)

内容的提问来源于stack exchange,提问作者Vishal Rathod

火山引擎 最新活动