> 技术文档 > Git Bash 中找不到 `rsync` 命令,这很正常,因为 Windows 版的 Git Bash 默认不包含 rsync_gitbash安装rsync

Git Bash 中找不到 `rsync` 命令,这很正常,因为 Windows 版的 Git Bash 默认不包含 rsync_gitbash安装rsync


替代方案 1:安装 rsync

通过 MSYS2 安装:
# 下载并安装 MSYS2curl -OL https://repo.msys2.org/distrib/x86_64/msys2-x86_64-20231026.exe./msys2-x86_64-20231026.exe# 安装后,在 MSYS2 终端中执行pacman -Syupacman -S rsync
通过 Chocolatey(Windows 包管理器)安装:
# 先安装 Chocolatey(管理员权限 PowerShell)Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(\'https://community.chocolatey.org/install.ps1\'))# 安装 rsyncchoco install rsync

替代方案 2:使用纯 Git 实现差异备份

创建备份脚本 git-diff-backup.sh
#!/bin/bashSOURCE_DIR=\"/d/你的项目目录\"BACKUP_DIR=\"/d/备份目录\"LATEST_BACKUP=\"$BACKUP_DIR/latest\"# 首次初始化备份if [ ! -d \"$LATEST_BACKUP\" ]; then echo \"正在创建初始备份...\" mkdir -p \"$LATEST_BACKUP\" cp -a \"$SOURCE_DIR\"/. \"$LATEST_BACKUP/\" echo \"✅ 初始备份完成\" exit 0fi# 创建新备份目录NEW_BACKUP=\"$BACKUP_DIR/backup-$(date +%Y%m%d-%H%M%S)\"mkdir -p \"$NEW_BACKUP\"# 差异备份核心函数diff_copy() { find \"$SOURCE_DIR\" -type f | while read -r file; do rel_path=\"${file#$SOURCE_DIR/}\" target_file=\"$NEW_BACKUP/$rel_path\" existing_file=\"$LATEST_BACKUP/$rel_path\" mkdir -p \"$(dirname \"$target_file\")\" # 文件存在且不同时才复制 if [ -f \"$existing_file\" ]; then if cmp -s \"$file\" \"$existing_file\"; then # 文件相同,不操作 : else cp \"$file\" \"$target_file\" echo \"🔄 更新文件: $rel_path\" fi else cp \"$file\" \"$target_file\" echo \"➕ 新文件: $rel_path\" fi done}echo \"开始差异备份...\"diff_copy# 更新最新备份链接rm -f \"$BACKUP_DIR/previous\"mv \"$LATEST_BACKUP\" \"$BACKUP_DIR/previous\"ln -sfn \"$NEW_BACKUP\" \"$LATEST_BACKUP\"echo \"✅ 备份完成:$NEW_BACKUP\"echo \"修改文件数: $(find \"$NEW_BACKUP\" -type f | wc -l)\"
使用方法:
  1. 将脚本保存为 git-diff-backup.sh
  2. 修改顶部的 SOURCE_DIRBACKUP_DIR 路径
  3. 运行:
    chmod +x git-diff-backup.sh./git-diff-backup.sh

替代方案 3:使用 Git 内置功能

创建 Git 自动化备份:
# 在项目目录初始化cd /d/你的项目目录git init# 首次提交git add .git commit -m \"初始备份\"# 创建备份脚本cat > git-backup.sh <<\\EOF#!/bin/bashgit add -uif git diff-index --quiet HEAD --; then echo \"无变更,跳过备份\"else git commit -m \"差异备份 $(date +\'%Y-%m-%d %H:%M\')\" echo \"✅ 已创建新备份点\"fiEOF# 设置定时任务(每天备份)echo \"0 20 * * * /d/你的项目目录/git-backup.sh\" | crontab

替代方案 4:使用 Windows 工具(无需额外安装)

创建 PowerShell 差异备份脚本 diff-backup.ps1
$Source = \"C:\\你的文件夹\"$BackupRoot = \"D:\\差异备份\"$LatestBackup = \"$BackupRoot\\Latest\"# 创建首次完整备份if (-not (Test-Path $LatestBackup)) { New-Item -ItemType Directory -Path $LatestBackup | Out-Null Robocopy $Source $LatestBackup /E /COPYALL /DCOPY:T /R:1 /W:1 Write-Host \"✅ 初始完整备份完成\" exit}# 创建差异备份$NewBackup = \"$BackupRoot\\Backup-{0:yyyyMMdd-HHmmss}\" -f (Get-Date)New-Item -ItemType Directory -Path $NewBackup | Out-Null$Stats = Robocopy $Source $NewBackup /E /COPYALL /DCOPY:T /XA:H /XO /XN /XC /XX /L /NP /NS /NC /NDL /NJH /NJS# 删除空目录Get-ChildItem $NewBackup -Recurse -Directory | Where-Object { $_.GetFiles().Count -eq 0 -and $_.GetDirectories().Count -eq 0 } | Remove-Itemif ($Stats -match \"已复制文件数\\s+:\\s+(\\d+)\") { # 更新符号链接 $Previous = \"$BackupRoot\\Previous\" if (Test-Path $Previous) { Remove-Item $Previous -Force } Rename-Item $LatestBackup -NewName ([System.IO.Path]::GetFileName($Previous)) -Force New-Item -ItemType Junction -Path $LatestBackup -Target $NewBackup | Out-Null Write-Host \"✅ 差异备份完成:$NewBackup\" Write-Host \"复制文件数: $($Matches[1])\"} else { Remove-Item $NewBackup -Recurse -Force Write-Host \"⚠ 无文件变更,跳过备份\"}

注意:此脚本使用了 Robocopy,这是 Windows 自带的强大复制工具,支持各种备份参数。


备份验证方法

# 比较源文件和最新备份diff -rq \"$SOURCE_DIR\" \"$LATEST_BACKUP\" --ignore-file-name-case# 查看备份目录占用空间du -sh \"$BACKUP_DIR\"/*

这些方案完全在 Windows 原生环境下工作,无需额外安装 Linux 工具即可实现高效的差异备份功能。推荐使用 PowerShell 脚本方案,它利用了 Windows 自带的 Robocopy 工具,功能强大且兼容性好。