Использование rsync из msysgit для двоичных файлов


22

У меня есть три оконных блока, которые по-разному подключены к блоку linux в моей сети (один локальный по отношению к сети, один - ноутбук, может быть локальным или нет, а другой - мой рабочий стол). В настоящее время я использую git для синхронизации большинства моих вещей между блоками (используя Linux-сервер в качестве сервера), и он работает как чемпион.

Теперь, однако, я также хотел бы добавить свою коллекцию MP3 (12 гигов) для эффективной синхронизации между коробками. Сначала я думал, что могу использовать git для этого, но похоже, что rsync будет лучшим выбором, так как мне не нужны все исторические вещи. Поскольку все мои существующие сценарии управления выполняются в git bash (вместо cygwin), я бы хотел использовать его из git bash (MINGW32 - это то, что написано в строке заголовка окна). Могу ли я просто скачать его в Cygwin и скопировать или есть лучший способ приблизиться к нему? В Linux установлена ​​последняя версия Ubuntu Server. Нужно ли что-то с ним делать, чтобы rsync правильно работал на нем?

Я понимаю, что, вероятно, делаю это немного сложнее, чем нужно, но я также использую это как упражнение для улучшения моих навыков командной строки. Какие-либо предложения?


Я могу использовать rsync из моей оболочки cygwin, но не из msysgit. Я попытался скопировать rsync.exe из папки bin cygwin в папку bin msysgit, но он по-прежнему не находит его. Есть ли какой-то другой шаг, который мне нужно сделать, чтобы установить его там? Странно, что я получаю сообщение об ошибке, что он не может найти файл, вместо того, чтобы дать мне сообщение об ошибке, что одна из зависимостей файла отсутствует.

Ответы:


25

На данный момент (7/7/2017) чрезвычайно легко вручную добавить поддержку rsync в среду Git для Windows, даже не прибегая к запуску Git для Windows SDK.

Я наткнулся на этот пост и не думал, что это может быть так легко, учитывая все альтернативы, но это действительно так. Все, что вам нужно сделать, это взять пакет rsync из репозитория MSYS2 Package и извлечь его rsync.exeв C:\Program Files\Git\usr\bin. Один и готово. Оно работает.

Если вам нужна помощь в извлечении rsync.exeиз пакета rsync (который имеет tar.xzформат), вы можете использовать утилиту сжатия, такую ​​как 7zip, или сделать это непосредственно в среде git Git для Windows, например:

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

Это даст вам rsync.exeфайл в загруженном месте (соответственно измените имя пакета). В свете проблем с разрешениями Windows я не буду пытаться давать конкретные команды для загрузки исполняемого файла в C:\Program Files\Git\usr\binпапку. Вы можете скопировать его с помощью графического интерфейса проводника или с помощью служебной программы с повышенными правами командной строки (и да, для копирования чего-либо в папки Program Files потребуются права администратора).

Если вы также хотите использовать аутентификацию Pageant с rsync поверх ssh, двоичный файл ssh-pageant уже установлен в Git для Windows, и все, что вам нужно сделать, это добавить небольшой бит в ваш файл ~/.bashrcили ~/.bash_profileфайл (см. Раздел об использовании ssh-pageant и Git для Windows вики ). Я изменил его специально для использования со средой Git для Windows и усовершенствовал его некоторым обнаружением отсутствующего файла сокета:

# 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. Это может быть хорошо, за исключением того, что я не могу установить apt-get install xz-utils( sudo apt-get install xz-utils), потому что я не могу ни установить sudoИЛИ apt-getв Git Bash для Windows :-( и, следовательно, не могу установить xz-utils. Есть ли способ обойти это? Есть более новая ссылка, где я могу получить rsync.exe, или каким образом я могу заставить Git Bash распаковать этот файл
.xz

На самом деле, похоже, проблема с разрешениями. Когда я tar -xf rsync-3.1.3-1-x86_64.pkg.tar.xz, я получаю кучу сообщений , заявив: Cannot open: Permission denied, Cannot mkdir: Permission denied, Cannot mkdir: No such file or directoryи Cannot open: No such file or directoryдля различных файлов / каталогов. Может быть, Git Bash уже знает, как распаковать xzфайлы? Но не может б / э разрешений? Я не могу использовать или установить sudo. Git Bash.
Шерил Хохман

Предполагая, что вы загрузили файл 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

Я знаю, что вопрос не «Использование rsync для MSYS», но я думаю, что упоминание этого уместно:

«MinGW Shell» (ранее известный как «MSYS (Basic System)») действительно имеет rsync. Я использую эту оболочку / систему как можно чаще, поскольку она намного меньше, чем Cygwin. (Я, наверное, единственный, кто заботится о размерах файлов в наши дни.)

«Git для Windows» / «Git Bash» может легко добавить rsync, поскольку он основан на MinGW / MSYS и уже упоминался в списке рассылки ранее.

PS! Если в вашей оболочке MinGW нет rsync, просто запустите «mingw-get install msys-rsync», чтобы добавить его.

Обновлено 25 марта 2016 года:

Git для Windows теперь использует MSYS2. И MSYS2 использует «pacman», а не «mingw-get», для установки пакетов. К сожалению, «Git для Windows» не включает pacman ... Есть два варианта:

  1. Установите Git для Windows SDK (в который входит pacman).
  2. Установите Git внутри MSYS2.

Последний вариант мой любимый, но он еще не оптимизирован, поэтому первый вариант, вероятно, проще. Надеюсь, это будет исправлено .

PS! Я мало играл с MSYS2 / pacman, но это выглядит очень многообещающе.

Обновлено 7 августа 2019 года:

Если вы используете Git для Windows (Git Bash), гораздо лучше просто получить пакет rsync из репозитория MSYS2 Package, как описано в ответе выше .


к сожалению, в Git Bash:$ mingw-get bash: mingw-get: command not found
Хенди Ираван

Да, это немного грустно. Посмотрите на мой обновленный ответ выше - все еще грустно, но ситуация улучшилась.
hansfn

Я выбрал второй вариант и у меня получилась папка объемом 2,17 ГБ, но все работает как шарм. Я установил rsync с помощью pacman -S rsync. Раньше я использовал CygWin, но я думаю, что MSYS2 - это круто, мне не нужно запускать графический интерфейс для установки дополнительных пакетов.
Edenshaw

Отчет об ошибках, перечисленный в этом ответе, с тех пор был закрыт как «нефиксированный» - однако я создал запрос на включение, чтобы rsync был включен в Git для Windows .
Скотт Стивенс

Любые ссылки о том, как сделать либо вариант 1 или вариант 2? Я думаю, что у меня есть Git для Windows SDK. Не знаю. Но, если я это сделаю, или смогу получить это .. что тогда? Если нет, я понятия не имею, что значит установить Git внутри MSYS2. Означает ли это, что мне нужно удалить мою текущую установку Git. Потерю ли я что-нибудь, например настройки или функциональность, если я это сделаю. Будут ли ссылки ломаться?
Шерил Хохман

2

Я предполагаю, что git bashвы действительно имеете в виду msysgit, иначе "мерзавец для окон". Опция меню Пуск git bash, которая объясняет имя, которое вы использовали.

Во-первых, вы правы, отклоняя git как вариант здесь. Одна из вещей , мерзавец ничего не делать хорошо обрабатывает двоичные файлы - и вы бы в конечном итоге с огромным, раздутый хранилище. Кроме того, поскольку вы не будете обрабатывать изменения, использование служебной информации git кажется мне излишним.

Во-вторых, это звучит так, как будто вы задаете вопрос: «Могу ли я использовать rsync из msysgit / Windows?» Краткий ответ, а не из коробки. msysgitна самом деле просто командная строка Windows с точки зрения формы и функции. При этом у вас есть два варианта: скачать сторонний инструмент для включения rsync на вашем компьютере с Windows ( Stack Overflow: Rsync для Windows ) или просто использовать cygwin. На самом деле, они имеют одинаковый результат - так что вам решать, какие из них работают лучше.


Я могу использовать rsync из моей оболочки cygwin, но не из msysgit. Я попытался скопировать rsync.exe из папки bin cygwin в папку bin msysgit, но он по-прежнему не находит его. Есть ли какой-то другой шаг, который мне нужно сделать, чтобы установить его там? Странно, что я получаю сообщение об ошибке, что он не может найти файл, вместо того, чтобы дать мне сообщение об ошибке, что одна из зависимостей файла отсутствует. Спасибо, Уилл
Уилл Гант

Это просто невозможно. cygwin устанавливает среду на основе GNU, включая Linux-подобные библиотеки, конфиги и т. д. msysgit- это командная строка Windows, которая поддерживает исполняемые файлы Windows. Вероятно, что он даже не может определить файл как исполняемый. Проще говоря, cygwin и msysgit не совместимы даже удаленно.
Эндрю М.

Возможно, но хакерский. Копировать cygiconv-2.dll, cygwin1.dllи rsync.exeиз Cygwin на ваш msysgit пути. Ничего другого (особенно не ssh.exe). Обычно проблема заключается в несовместимости между Git SSH и Cygwin / rsync SSH. Попробуйте сохранить ту же версию. У вас все еще будут проблемы с, /cygdrive/но там у меня нет решения, кроме как cd.
Wernight

0

Что бы это ни стоило, у меня были похожие проблемы с тем, чтобы cwRsync работал в msysgit при попадании в путь bin, но, попробовав много разных вещей, в конце концов обнаружил, что простое обновление до последней версии (2.10.2) Git для Windows исправило вопрос.


cwRsync - $ 19 / год. itefix.net/cwrsync
Шерил Хоман,

0

rsync отлично подходит для однонаправленной синхронизации. Вы можете либо запустить rsync под Cygwin, либо для Windows также есть Deltacopy

Если вы хотите иметь двунаправленную синхронизацию, посмотрите на унисон

Для кросса инструмента синхронизации каталогов платформы, есть syncthing , который работает на большинстве платформ.


Унисон великолепен, но вы должны установить его на сервер - примерно 90% серверов готовы к rsync. И ОП попросил rsync
пщеит

ОП спросил о rsync, но ОП пытался добиться «эффективной синхронизации между коробками», а унисон доступен в большинстве репозиториев ...
shouldbeq931

Похоже, DeltaCopy недоступен для Windows 10. Может больше не поддерживаться?
Шерил Хохман

Трудно сказать, работает ли Unison на Windows 10. У него давно не было обновлений. Нет упоминания о том, какие версии ОС Windows поддерживает это программное обеспечение. Есть несколько проблем: Windows 10 github.com/bcpierce00/unison/…
SherylHohman

В качестве кроссплатформенного инструмента для синхронизации структуры каталогов в настоящее время я бы предложил синхронизацию syncthing.net Однако в 2011 году ....
shouldbeq931
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.