使用 msysgit 的 rsync 来同步二进制文件

使用 msysgit 的 rsync 来同步二进制文件

我有三个 Windows 机器,它们以各种方式连接到我网络上的 Linux 机器(一个是本地网络,一个是笔记本电脑,可能在本地也可能不在本地,另一个是我的工作台式机)。我目前正在使用 git 在机器之间同步我的大部分内容(使用 Linux 机器作为服务器),它运行良好。

但是现在,我还想添加我的 MP3 收藏(12 GB),以便在各个盒子之间高效同步。我最初以为我可以使用 git 来实现这一点,但看起来 rsync 会是一个更好的选择,因为我实际上并不需要所有的历史资料。由于我所有现有的管理脚本都在 git bash(而不是 cygwin)下运行,所以我希望能够从 git bash 使用它(窗口标题栏中显示的是 MINGW32)。我可以在 Cygwin 中下载它并将其复制过来吗?或者有更好的方法吗?Linux 机器正在运行最新版本的 Ubuntu Server 版本 - 我需要对它进行任何操作才能使 rsync 在其上正常工作吗?

我意识到我可能做得比需要的稍微困难一些,但我也把它当作一种练习来提高我的命令行技能。有什么建议吗?


我可以从 cygwin shell 使用 rsync,但不能从 msysgit 使用。我尝试将 rsync.exe 从 cygwin 的 bin 文件夹复制到 msysgit 的 bin 文件夹,但仍然找不到它。我需要执行其他步骤才能在那里安装它吗?奇怪的是,我收到一个错误,说它找不到文件,而不是给我一个错误,说文件的一个依赖项缺失。

答案1

我最初关于让 rsync 与 Windows 版 Git 配合使用的说明是有点过时了,所以我修改了这个答案,以涵盖 2023 年中期 MSYS2 的切换zstd以及 rsync 所需的其他依赖项。主要问题是 MSYS2 现在使用 zstd 压缩大多数软件包(包括 zstd、rsync 和依赖项),但 zstd 不包含在基础环境中。因此,我们无法从 MSYS2 存储库中获取 zstd——但我们可以直接从 zstd Github 版本中获取它,它是一个 zip 存档,而不是 zst。我最初在这个帖子仍然相同,但由于上述问题,需要做更多工作。一旦我们知道所有需要做的事情,整个过程仍然很容易完成。

以下是命令:
  • 下载 zstd 二进制文件以用于提取更多包
  • 下载、提取并将 rsync 二进制文件及其依赖项放置在正确的 bin 文件夹中

这些步骤已在全新安装的 Windows 11 上进行了测试,仅安装了最新的 Git for Windows(也适用于 Windows 10)。完成这些步骤不需要其他依赖项。

与往常一样,检查粘贴到终端的内容并自行承担风险

步骤 1:zstd 要求

如果您的环境尚不支持提取使用 zstd 压缩的档案(例如 Windows 版 Git),最简单的方法可能是直接从 ztsd 发布页面下载最新的 zstd Windows 二进制文件:https://github.com/facebook/zstd/releases。如果您已经有可用的 zstd 并且位于您的源路径中,则跳至步骤 2(并且您可能需要调整脚本中的 zstd 二进制位置)。

调整以下变量以获得最新的源位置、版本和首选下载位置后,将以下行复制到 Git Bash 终端中:

working="/c/temp-downloads"
zstd_url="https://github.com/facebook/zstd/releases/download/v1.5.5/zstd-v1.5.5-win64.zip"
mkdir -p "$working"
curl -L -o "$working/zstd.zip" "$zstd_url"
unzip -j "$working/zstd.zip" "*/zstd.exe" -d "$working"

步骤 2:下载兼容的 rsync 和依赖二进制文件,提取并放置在适当的位置

将以下行复制到管理员 Git Bash 终端中,然后调整以下变量以获取最新源位置、版本和首选下载位置。终端必须以管理员身份运行如果目标 bin 文件夹位于需要特权访问的位置。

# If you downloaded zstd above, make sure your working folder is the same as where the zstd binary is located
working="/c/temp-downloads"
# Set the location of the Git usr/bin folder (under normal installations we can simply use /usr/bin because the MSYS2 root is the Git installation folder)
git_usr_bin_folder_location="/usr/bin"
rsync_url="https://repo.msys2.org/msys/x86_64/rsync-3.2.7-2-x86_64.pkg.tar.zst"
libxxhash_url="https://repo.msys2.org/msys/x86_64/libxxhash-0.8.1-1-x86_64.pkg.tar.zst"
mkdir -p "$working"
curl -L -o "$working/rsync.tar.zst" "$rsync_url"
curl -L -o "$working/libxxhash.tar.zst" "$libxxhash_url"
tar -I "$working/zstd.exe" -xvf "$working/rsync.tar.zst" --directory="$working"
tar -I "$working/zstd.exe" -xvf "$working/libxxhash.tar.zst" --directory="$working"
cp -a "$working/usr/bin/." "$git_usr_bin_folder_location"

这应该是让 rsync 工作所需的全部内容,因为其他所有必要内容都已包含在 Windows MSYS2 基本 Git 环境中。现在您可以清理工作文件夹的内容。希望在某个时候 zstd 将包含在基本环境中,并且不需要额外的获取步骤,但目前就是这样。

如果你还想通过 ssh 使用 rsync 进行 Pageant 身份验证,则 ssh-pageant 二进制文件是已安装在 Git for Windows 中~/.bashrc你需要做的就是在你的或文件中添加一点内容~/.bash_profile(参见ssh-pageant 使用部分Windows 版 Git 维基)。我专门对其进行了修改,使其适用于 Windows 版 Git 环境,并通过检测缺失套接字文件来增强它的功能:

# ssh-pageant allows use of the PuTTY authentication agent (Pageant)
SSH_PAGEANT="$(command -v ssh-pageant)"
if [ -S "$SSH_AUTH_SOCK" ]; then
  PAGEANT_SOCK=$SSH_AUTH_SOCK
else
  PAGEANT_SOCK=${TEMP:-/tmp}/.ssh-pageant-$USERNAME
fi
if [ -x "$SSH_PAGEANT" ]; then
  eval $("$SSH_PAGEANT" -qra "$PAGEANT_SOCK")
fi
unset SSH_PAGEANT
unset PAGEANT_SOCK

答案2

我知道问题不是“使用 rsync 进行 MSYS”,但我认为提及这一点是相关的:

“MinGW Shell”(以前最广为人知的是“MSYS(基本系统)”)确实有 rsync。我尽可能多地使用该 shell/系统,因为它比 Cygwin 小得多。(我可能是现在唯一关心文件大小的人。)

“Git for Windows”/“Git Bash”可以轻松添加 rsync,因为它基于 MinGW/MSYS,并且之前已在邮件列表中提到过。

PS!如果您的 MinGW Shell 没有 rsync,只需运行“mingw-get install msys-rsync”即可添加它。

2016 年 3 月 25 日更新:

Windows 版 Git 现在使用 MSYS2。MSYS2 使用“pacman”而不是“mingw-get”来安装软件包。不幸的是,“Windows 版 Git”不包含 pacman... 有两个选项:

  1. 安装适用于 Windows SDK 的 Git(其中包括 pacman)。
  2. 在 MSYS2 内安装 Git。

最后一个选项是我最喜欢的,但它不是精简所以第一个选项可能更容易。希望它将会修复

附言!我没怎么玩过 MSYS2 / pacman,但它看起来很有前途。

2019 年 8 月 7 日更新:

如果你使用的是 Windows 版 Git(Git Bash),那么最好直接从 MSYS2 软件包存储库中获取 rsync 软件包,如回答上面

答案3

我认为git bash您真正指的是msysgit,又名“适用于 Windows 的 git”。“开始菜单”选项是git bash,这解释了您使用的名称。

首先,你在这里拒绝使用 git 是正确的。git 所做的一件事不是做得不好的地方是处理二进制文件——最终你会得到一个庞大而臃肿的存储库。此外,由于你不会处理更改,使用 git 的开销在我看来是过度的。

其次,听起来你实际上想问的问题是“我可以从 msysgit/Windows 使用 rsync 吗?”简短的回答是,不是开箱即用的。 msysgit实际上只是形式和功能上的 Windows 命令行。话虽如此,你有两个选择:下载第三方工具以在 Windows 机器上启用 rsync(Stack Overflow:适用于 Windows 的 Rsync),或者直接使用 cygwin。实际上,它们的结果是一样的——因此由您来决定哪一个效果更好。

答案4

不管怎样,我也遇到了类似的问题同步在放入 bin 路径时在 msysgit 中工作,但在尝试了很多不同的方法后最终发现,只需更新到最新版本(2.10.2)适用于 Windows 的 Git解决了这个问题。

相关内容