Назад | Перейти на главную страницу

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

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

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

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


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

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

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

Если вам нужна помощь в извлечении rsync.exe из пакета rsync (который находится в tar.xz format), вы можете либо использовать утилиту сжатия, например 7zip, либо сделать это непосредственно в среде Git для 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 папка. Вы можете скопировать его через графический интерфейс проводника или через служебную программу командной строки с повышенными привилегиями (и да, для копирования чего-либо в папки 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.

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

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

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

PS! Если в вашей оболочке MinGW Shell нет 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, как описано в ответ выше.

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

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

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

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

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

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

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