背景(了解):
公司的前端项目里有bash脚本,开发人员在开发完,可以跑bash脚本自动发布部署到测试环境。但是windows是没办法直接跑bash脚本的,最便捷的做法就是借用git bash这个终端来跑项目里的bash脚本。但是windows的源里并没有rsync,所以我们需要借助一些手段来安装rsync。以下我们将站在巨人的肩膀上,教大家怎么安装rsync,并且怎么处理一些报错情况。
一、原理(了解):
如何在 Windows 下跑 rsync ?
rsync 是 Linux 平台的程序,要在 Windows 运行,要么就是拿源码在Windows环境下重新编译一遍,那么就会用到 MinGW 这类的编译工具,并且改动源码肯定是少不了的;要么就是在 Windows 下搞一个 Linux 的虚拟环境,那么可以考虑 Cygwin, WSL 这类东西。有没有更简单的方法呢?想到在 Windows 下使用 Git Bash 工具的时候,也经常会使用到 ls, grep 这类 Linux 下的命令,那么这个又是如何实现的?
找了一些资料,发现 Git for Windows 是基于 MSYS 做出来的。以下引用一段来自知乎网友的话:
(来源:在windows下为什么装了git bash等工具后就能执行linux命令? - 知乎)
MSYS
当 MinGW 出现之后,程序员们发现光有 GCC 不行啊,面对着如此 naive 的 Windows 命令行也照样不能干活,Cygwin 又太大了。所以 MinGW 的一群人再次 fork 了 Cygwin,把它精简了一番,就成了 MSYS。后来,MinGW 咕咕咕了,MSYS 也随之咕咕咕了,又一群程序员 fork 了新版本的 Cygwin,精简了一番,给它加上了 Pacman 包管理器(没错就是 Arch Linux 用的那个),最后给 MSYS 的名字后面加了个 2,成了 MSYS2。
Git for Windows
随着 Git 的快速完善,将 Git 移植到 Windows 的呼声越来越高,可是 Git 需要很多 Linux 下的命令行工具,所以不想重复造轮子的 Git 开发者们找到了 MSYS2,又将 MSYS2 做了一番精简和针对 Git 的修改,把 Git 放了进去。
ls, grep 这些程序包正是通过 Pacman 去管理的。而在 Git 的安装目录下也是可以找到这些程序包的 exe 文件的(在 Git/usr/bin 目录下)。
那么,是不是找到了 rsync 在 Windows 平台的 pacman package,同样就可以实现在 Windows Git Bash 中运行 rsync 呢?
答案确实是如此的。这篇文章就将介绍这个实现过程。
二、下载安装包
可在此处下载 windows 环境下的 Pacman package: Index of /~nickoe/msys2-mirror/msys/x86_64
我们需要使用到以下的两个 package: zstd 和 rsync。(zstd 是用来解压 rsync 的程序包的)
zstd:
rsync:
选择其中最新的版本来下载即可(ps:如果有的版本有问题,也可以更换其他版本,不需要拘泥一格)。
如,我将 zstd-1.4.5-2-x86_64.pkg.tar.xz 和 rsync-3.2.3-1-x86_64.pkg.tar.zst 下载到 D:\tools 目录下。
三、使用 zstd
使用 7zip 等Windows下的解压工具解压 zstd-1.4.5-2-x86_64.pkg.tar.xz。
将 zstd 的相关文件复制到 Git 安装目录的对应位置,如:
D:\tools\zstd-1.4.5-2-x86_64.pkg\usr\bin --> D:\Program Files\Git\usr\bin
D:\tools\zstd-1.4.5-2-x86_64.pkg\usr\share --> D:\Program Files\Git\usr\share
使用 zstd 来解压 rysnc 包。打开 Git Bash,执行:
cd /d/tools/
mkdir rsync-3.2.3-1
tar -I zstd -xvf /d/tools/rsync-3.2.3-1-x86_64.pkg.tar.zst -C /d/tools/rsync-3.2.3-1
四、使用 rsync
将 rsync 的相关文件复制到 Git 安装目录的对应位置,如:
D:\tools\rsync-3.2.3-1\usr\bin --> D:\Program Files\Git\usr\bin
D:\tools\rsync-3.2.3-1\usr\lib --> D:\Program Files\Git\usr\lib
D:\tools\rsync-3.2.3-1\usr\share --> D:\Program Files\Git\usr\share
在 Git Bash 中使用 rsync:
# 查看版本号
rsync --version
# 查看帮助信息
rsync -h
# 同步文件
rsync -avP <src_dir> <dest_dir>
五、异常情况处理办法
package下载:下载 rsync-3.2.3-2-x86_64.pkg.tar.zst 、 libzstd-1.4.9-1-x86_64.pkg.tar.zst (可选)、 libxxhash-0.8.0-1-x86_64.pkg.tar.zst (可选)、 liblz4-1.9.3-1-x86_64.pkg.tar.zst (可选)
配置
- rsync 文件夹里的 bin 和 lib 的内容分别复制到 Git/usr/bin 和 Git/usr/lib 下
(如上面已操作过,可忽略第1点) - 打开 Git Bash ,运行 rsync -v ,如果报 msys-zstd-1.dll not found ,则将 libzstd 文件夹里的 bin 的内容复制到 Git/usr/bin 下
- 重新运行,如果报 msys-xxhash-0.dll not found ,则将 libxxhash 文件夹里的 bin 的内容复制到 Git/usr/bin 下,并将其重命名为 msys-xxhash-0.dll
- 重新运行,如果报 msys-lz4-1.dll not found ,则将 liblz4 文件夹里的 bin 的内容复制到 Git/usr/bin 下
- 重新运行,如果报 msys-crypto-1.1.dll not found ,则将 Git/usr/bin 文件夹里的 msys-crypto-1.0.0.dll 复制到当前目录,并重命名为 msys-crypto-1.1.dll
(第5点中,有的人的msys-crypto的版本并不是1.0.0,但是不影响,如我的是 msys-crypto-3.dll,复制出一份,原有的不要删,然后更名为msys-crypto-1.1.dll)
参考:
Windows下使用Git+rsync构建文件同步工具_rsync在windows编译-CSDN博客
Windows配置rsync - sjmuvx - 博客园 (cnblogs.com)