将msysgit中的rsync用于二进制文件


22

我有三个以各种方式连接到网络上的Linux盒的Windows盒(一个在网络上本地,一个是笔记本电脑,可能在本地或不在本地,另一个是我的工作台式机)。我目前正在使用git在框之间同步我的大多数东西(使用Linux框作为服务器),它的工作原理很简单。

但是,现在,我还想添加我的MP3集合(12个演出),以便在盒子之间有效地同步。起初我以为可以使用git,但是rsync似乎是一个更好的选择,因为我真的不需要所有的历史资料。由于我所有现有的管理脚本都在git bash(而不是cygwin)下运行,因此我希望能够从git bash中使用它(MINGW32是窗口标题栏中的内容)。我可以直接在Cygwin中下载并复制它,还是可以找到一种更好的方法?Linux机器正在运行最新版本的Ubuntu Server版本-我需要对它做任何事情以使rsync在其上正常工作吗?

我意识到我可能会以比所需的难度稍大的方式来执行此操作,但是我也以此为练习来提高我的命令行技能。有什么建议么?


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

Answers:


25

截至目前(2017年9月7日),手动将rsync支持添加到Git for Windows环境非常容易,而无需诉诸运行Git for Windows SDK。

我偶然发现了这篇文章,但考虑到所有其他选择,它真的不那么容易,但是确实如此。您需要做的就是从MSYS2软件包存储库中获取rsync软件包并将rsync.exe文件提取到中C:\Program Files\Git\usr\bin。一完成。有用。

如果您需要rsync.exe从rsync包(tar.xz格式)中提取帮助,则可以使用7zip之类的压缩实用程序,也可以直接在Git for Windows bash环境中使用它,如下所示:

cd /c/downloaded_location
tar -xvf rsync.pkg.tar.xz usr/bin/rsync.exe --strip-components=2

这样就可以rsync.exe在下载位置找到文件(相应地调整软件包名称)。鉴于Windows权限问题,我不会尝试提供有关将exe放入C:\Program Files\Git\usr\bin文件夹的特定命令。您可以通过资源管理器GUI或通过提升的命令行实用程序来复制它(是的,它需要管理员级别的权限才能将某些内容复制到Program Files文件夹中)。

如果您还希望通过ssh在rsync上使用Pageant身份验证,则ssh-pageant二进制文件已安装在Windows的Git中,而您需要做的就是在您的~/.bashrc~/.bash_profile文件中添加一点点(请参见ssh-pageant的用法部分Git的说明)。 Windows Wiki)。我专门针对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

通过这种方式手动安装它们,我无法说明其他实用程序如何工作或无法工作,但是rsync似乎可以正常工作。希望该回购协议将继续存在并继续进行更新-我想是这样,因为它是在MSYS2官方站点上托管的。


1
谢谢您,先生,下载成功了..谁知道...
pscheit

问题。有没有是rsync.exe只在rsync的各种版本的.pkg.tar.xz 格式。这可能是OK,但我不能安装apt-get install xz-utilssudo apt-get install xz-utils),因为我既不能安装sudoapt-get以混帐猛砸为Windows :-(,因而因此无法安装xz-utils。有没有解决这个办法吗?是否有一个新的链接,我可以得到rsync.exe,或我可以通过某种方式让Git Bash解压缩此.xz文件吗
SherylHohman

实际上,这似乎更多是权限问题。当我tar -xf rsync-3.1.3-1-x86_64.pkg.tar.xz,我得到了一堆消息指出的:Cannot open: Permission deniedCannot mkdir: Permission deniedCannot mkdir: No such file or directoryCannot open: No such file or directory各种文件/目录。也许 Git Bash已经知道如何解压缩xz文件?但是不能获得权限吗?我无法使用或安装sudo。到Git Bash。
SherylHohman

假设您将tar.xz文件下载到“下载”文件夹,则可以使用以下方法从Git Bash中解压缩文件:cd / && tar Jxvf /c/Users/$USR/Downloads/rsync-3.1.3-1-x86_64.pkg.tar.xz
hansfn

@SherylHohman,您必须从包文件中手动提取exe。除了将exe放入C:\Program Files\Git\usr\bin文件夹外,没有其他“安装”必要。
nextgentech

7

我知道问题不是“在MSYS中使用rsync”,但我认为提到这一点很重要:

实际上,“ MinGW Shell”(以前最称为“ MSYS(基本系统)”)确实具有rsync。由于它比Cygwin小得多,因此我会尽可能多地使用该shell /系统。(这些天我可能是唯一关心文件大小的人。)

“ 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”来安装软件包。不幸的是,“ Git for Windows”不包含pacman ...有两种选择:

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

最后一个选项是我的最爱,但尚未精简,因此第一个选项可能更容易。希望它将得到修复

PS!我在MSYS2 / pacman上玩的不多,但看起来非常有前途。

2019年8月7日更新:

如果您使用的是Windows版Git(Git Bash),则最好从MSYS2软件包存储库中获取rsync软件包,如上面答案所述


可悲的是,在Git Bash中:$ mingw-get bash: mingw-get: command not found
Hendy Irawan

是的,这有点难过。看看上面我的最新答案-仍然很悲伤,但情况有所改善。
汉斯芬

我选择了第二个选项,最终得到一个2.17GB的文件夹,但是一切正常。我使用安装了rsync pacman -S rsync。过去,我使用CygWin,但我认为MSYS2很棒,我不必运行gui即可安装其他软件包。
Edenshaw

此答案中列出的错误报告此后被关闭为“无法修复”-但是,我创建了一个请求请求,以将rsync包含在Windows的Git中
斯科特·史蒂文斯(Stevens)

关于如何执行选项1或选项2的任何链接?我想我有适用于Windows SDK的Git。不知道。但是假设我愿意,或者可以得到..那又如何呢?如果没有,我什至不知道在MSYS2中安装Git意味着什么。这是否意味着我需要删除当前的Git安装。我会放开任何东西吗,例如设置或功能。否链接会断开吗?
SherylHohman

2

我认为git bash您是真的意思msysgit,又名“ windows的git”。“开始菜单”选项为git bash,说明您使用的名称。

首先,您可以在这里关闭git作为选项是正确的。git做得不好的事情之一就是处理二进制文件-最终您将得到一个庞大的,repository肿的存储库。此外,由于您将不会处理更改,因此使用git的开销会让我感到过分杀伤力。

其次,听起来您实际上要问的问题是:“我可以从msysgit / Windows使用rsync吗?” 简短的答案是,不是开箱即用。 msysgit就形式和功能而言,实际上只是Windows命令行。话虽如此,您有两种选择:下载第三方工具以在Windows计算机上启用rsync(Stack Overflow:Windows的Rsync),或仅使用cygwin。确实,它们具有相同的结果-因此,由您决定哪个效果更好。


我可以从cygwin shell中使用rsync,但不能从msysgit中使用rsync。我尝试将rsync.exe从cygwin的bin文件夹复制到msysgit的bin文件夹,但是仍然找不到它。我还需要执行其他步骤以将其安装到那里吗?奇怪的是,我遇到一个找不到文件的错误,而不是给我一个错误,即文件的某个依赖项丢失。谢谢,威尔
威尔·甘特

这根本不可能。cygwin建立了一个基于GNU的环境,包括类似Linux的库,配置等。这 msysgit是Windows命令行,它支持Windows可执行文件。可能发生的情况是,它甚至无法将文件检测为可执行文件。简而言之,cygwin和msysgit甚至不是远程兼容的。
Andrew M.

这可能是但hacky。复制cygiconv-2.dllcygwin1.dll然后rsync.exe从Cygwin 复制到您的msysgit路径。没别的(特别是不是ssh.exe)。问题通常是Git SSH和Cygwin / rsync SSH之间不兼容。尝试保持相同的版本。您仍然会/cygdrive/遇到的问题,但除了之外,我没有其他解决方案cd
12


0

rsync非常适合单向同步。您可以在cygwin下运行rsync,或者对于Windows也可以使用Deltacopy

如果您想进行双向同步,请统一查看

对于跨平台的目录同步工具,有syncthing运行在大多数平台。


统一很棒,但是您必须将其安装在服务器上-就像90%的服务器都已准备好rsync一样。OP要求rsync
pscheit

OP询问了rsync,但是OP试图实现的目的是“在盒子之间进行高效同步”,并且在大多数存储库中都可以使用统一格式…
应该是931年

看起来DeltaCopy在Windows 10中不可用。可能不再维护了吗?
SherylHohman

很难确定Unison是否可以在Windows 10上运行。很长时间没有更新。没有提及该软件支持哪些Windows OS版本。有几个问题再:窗10 github.com/bcpierce00/unison/...
SherylHohman

作为一个跨平台的工具,以保持目录结构中同步这些天,我建议syncthing syncthing.net在2011年不过....
shouldbeq931
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.