How to use rsync on Git Bash
Here’s a guide on how to use rsync on Git Bash in the Windows operating system. (Installed using the Windows 10 October 2020 Update version iso)
1. Install zstd
zstd(Zstandard) is a compression algorithm by facebook that we’ll be using from now on. First download a zstd release zip file from the below link.
https://github.com/facebook/zstd/releases/download/v1.4.4/zstd-v1.4.4-win64.zip
Then make a directory wherever you want to keep the zstd executable. (I just kept it in my Downloads directory) It might be a good idea to keep it at a more basic directory (like root).
cd ~/Downloads
mkdir zstd
mv zstd-v1.4.4-win64.zip ./zstd
cd zstd
unzip zstd-v1.4.4-win64.zip
echo "alias zstd=\"/c/Users/[USER_NAME]/Downloads/zstd/zstd.exe\"" >> ~/.bashrc
source ~/.bashrc
By executing the above sequence, we can use the zstd. We can check whether everything went well by executing ‘zstd -h’. It should print out the below messages.
Now we can use the ‘zstd -d’ command to decompress pkg.tar.zst files we will download later on.
2. Get rsync.exe
All the required files can be acquired from http://repo.msys2.org/msys/x86_64/ (will be used in step 3 as well)
From the above site, download the latest rsync compressed file. (in my case it was rsync-3.2.3–1-x86_64.pkg.tar.zst)
mv ~/Downloads
mkdir rsync
mv rsync-3.2.3-1-x86_64.pkg.tar.zst ./rsync
cd ./rsync
zstd -d rsync-3.2.3-1-x86_64.pkg.tar.zst
tar -xvf rsync-3.2.3-1-x86_64.pkg.tar
The rsync.exe we want to find resides in ~/Downloads/rsync/usr/bin directory.
mv ~/Downloads/rsync/usr/bin/rsync.exe C:\Program Files\Git\usr\binecho "alias rsync=\"/usr/bin/rsync.exe\"" >> ~/.bashrc
source ~/.bashrc
After executing the above sequence, if you execute ‘rsync’, an error message such as “error while loading shared libraries: msys-zstd-1.dll: cannot open shared object file: No such file or directory occurs”.
3. Acquiring the missing dll files
So, to normally execute rsync, we require two additional dll files, libzstd and libxxhash.
- libzstd
Download the latest libzstd compressed file. (in my case libzstd-1.4.8–1-x86_64.pkg.tar.zst)
mv ~/Downloads
mkdir libzstd
mv libzstd-1.4.8-1-x86_64.pkg.tar.zst ./libzstd
cd./libzstd
zstd -d libzstd-1.4.8-1-x86_64.pkg.tar.zst
tar -xvf libzstd-1.4.8-1-x86_64.pkg.tar
2. libxxhash
Download the latest libxxhash compressed file. (in my case libxxhash-0.8.0–1-x86_64.pkg.tar.zst)
mv ~/Downloads
mkdir libxxhash
mv libxxhash-0.8.0-1-x64_64.pkg.tar.zst ./libxxhash
cd ./libxxhash
zstd -d libxxhash-0.8.0-1-x64_64.pkg.tar.zst
tar -xvf libxxhash-0.8.0-1-x64_64.pkg.tar
Then copy/move the above acquired dll files to where we copied/moved the rsync.exe file, to C:\Program Files\Git\usr\bin.
mv ~/Downloads/libzstd/usr/bin/msys-zstd-1.dll C:\Program Files\Git\usr\bin
mv ~/Downloads/libxxhash/usr/bin/msys-xxhash-0.8.0.dll C:\Program Files\Git\usr\bin
After the above 3 steps, you should be able to use rsync on Git bash. (executing ‘rsync -h’ should return the below messages)
(Any comments or constructive criticisms are always welcome!)