Utilisation de rsync à partir de msysgit pour les fichiers binaires

22

J'ai trois boîtes Windows qui sont connectées à une boîte Linux sur mon réseau de différentes manières (l'une locale au réseau, l'une est un ordinateur portable et peut ou non être locale, et l'autre est mon bureau de travail). J'utilise actuellement git pour synchroniser la plupart de mes trucs entre les boîtes (en utilisant la boîte Linux comme serveur) et cela fonctionne comme un champion.

Maintenant, cependant, je voudrais également ajouter ma collection MP3 (12 concerts) pour être efficacement synchronisée entre les boîtes. J'ai d'abord pensé que je pouvais utiliser git pour cela, mais il semble que rsync serait un meilleur choix car je n'ai pas vraiment besoin de tous les trucs historiques. Étant donné que tous mes scripts de gestion existants s'exécutent sous git bash (au lieu de cygwin), j'aimerais pouvoir l'utiliser à partir de git bash (MINGW32 est ce qu'il dit dans la barre de titre de la fenêtre). Puis-je simplement le télécharger dans Cygwin et le copier ou existe-t-il une meilleure façon de l'aborder? La boîte Linux exécute la dernière version de l'édition d'Ubuntu Server - dois-je faire quoi que ce soit pour que rsync fonctionne correctement?

Je me rends compte que je fais probablement cela d'une manière un peu plus difficile que nécessaire, mais je l'utilise également comme un exercice pour améliorer mes compétences en ligne de commande. Aucune suggestion?


Je peux utiliser rsync depuis mon shell cygwin, mais pas depuis msysgit. J'ai essayé de copier rsync.exe du dossier bin de cygwin vers le dossier bin de msysgit, mais il ne le trouve toujours pas. Y a-t-il une autre étape que je dois faire pour l'installer là-bas? Il est étrange que j'obtienne une erreur indiquant qu'il ne trouve pas le fichier, au lieu de me donner une erreur indiquant qu'une des dépendances du fichier est manquante.

Will Gant
la source

Réponses:

25

À partir de maintenant (9/7/2017), il est extrêmement facile d'ajouter manuellement la prise en charge de rsync à l'environnement Git pour Windows sans même avoir à recourir à l'exécution du SDK Git pour Windows.

Je suis tombé sur ce post et je ne pensais pas que cela pourrait vraiment être aussi simple compte tenu de toutes les alternatives, mais c'est vraiment le cas. Il vous suffit de récupérer le package rsync du référentiel de packages MSYS2 et d'extraire le rsync.exefichier C:\Program Files\Git\usr\bin. Un et terminé. Ça marche.

Si vous avez besoin d'aide pour extraire rsync.exedu package rsync (qui est au tar.xzformat), vous pouvez soit utiliser un utilitaire de compression comme 7zip ou le faire directement dans l'environnement bash de Git pour Windows comme ceci:

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

Cela vous donne le rsync.exefichier à l'emplacement téléchargé (ajustez le nom du package en conséquence). À la lumière des problèmes d'autorisations Windows, je n'essaierai pas de donner des commandes spécifiques pour obtenir l'exe dans le C:\Program Files\Git\usr\bindossier. Vous pouvez le copier via une interface graphique d'explorateur ou via un utilitaire de ligne de commande élevé (et oui, il faudra des autorisations de niveau administrateur pour copier quelque chose dans les dossiers Program Files).

Si vous souhaitez également utiliser l'authentification Pageant avec rsync sur ssh, le binaire ssh-pageant est déjà installé dans Git pour Windows et tout ce que vous devez faire est d'ajouter un petit peu à votre fichier ~/.bashrcou ~/.bash_profile(voir la section d'utilisation de ssh-pageant et Git pour Wiki Windows ). Je l'ai modifié spécifiquement pour une utilisation avec l'environnement Git pour Windows et l'ai amélioré avec une certaine détection d'un fichier socket manquant:

# 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

Je ne peux pas parler de la façon dont d'autres utilitaires pourraient ou non fonctionner en les installant manuellement de cette façon, mais rsync semble fonctionner très bien. Espérons que ce dépôt restera et continuera d'être mis à jour - je pense que oui car il est hébergé sur le site officiel de MSYS2.

nextgentech
la source
1
merci monsieur, le téléchargement et ça marche .. qui aurait su ...
pscheit
Problème. Il n'y a pas rsync.exeseulement différentes versions de rsync dans les .pkg.tar.xz formats. Cela peut être OK, sauf que je ne peux pas installer apt-get install xz-utils( sudo apt-get install xz-utils) car je ne peux ni installer sudoOR apt-getsur Git Bash pour Windows :-( et donc ne peux pas installer xz-utils. Y a-t-il un moyen de contourner cela? Y a-t-il un lien plus récent où je peux obtenir rsync.exe, ou d'une manière ou d'une autre pour que Git Bash décompresse ce fichier .xz?
SherylHohman
En fait, il semble que ce soit davantage un problème d'autorisations. Quand je tar -xf rsync-3.1.3-1-x86_64.pkg.tar.xz, je reçois un tas de messages indiquant: Cannot open: Permission denied, Cannot mkdir: Permission denied, Cannot mkdir: No such file or directoryet Cannot open: No such file or directorypour divers fichiers / répertoires. Peut-être que Git Bash sait déjà comment décompresser des xzfichiers? Mais ne peut pas b / e des autorisations? Je ne peux ni utiliser ni installer sudo. à Git Bash.
SherylHohman
En supposant que vous ayez téléchargé le fichier tar.xz dans votre dossier Téléchargements, vous pouvez le décompresser de Git Bash en utilisant:cd / && tar Jxvf /c/Users/$USR/Downloads/rsync-3.1.3-1-x86_64.pkg.tar.xz
hansfn
@SherylHohman, vous devez extraire manuellement l'exe du fichier de package. Il n'y a aucune "installation" nécessaire autre que de simplement déposer l'exe dans le C:\Program Files\Git\usr\bindossier.
nextgentech
7

Je sais que la question n'est pas "Utiliser rsync pour MSYS", mais je pense que mentionner cela est pertinent:

"MinGW Shell" (anciennement mieux connu sous le nom de "MSYS (Basic System)") a en effet rsync. J'utilise ce shell / système aussi souvent que possible car il est beaucoup plus petit que Cygwin. (Je suis probablement le seul qui se soucie de la taille des fichiers de nos jours.)

"Git pour Windows" / "Git Bash" pourrait facilement ajouter rsync car il est basé sur MinGW / MSYS et il a été mentionné plus tôt dans la liste de diffusion.

PS! Si votre shell MinGW n'a pas rsync, exécutez simplement "mingw-get install msys-rsync" pour l'ajouter.

Mis à jour le 25 mars 2016:

Git pour Windows utilise désormais MSYS2. Et MSYS2 utilise "pacman", pas "mingw-get", pour installer les packages. Malheureusement, "Git pour Windows" n'inclut pas pacman ... Il y a deux options:

  1. Installez le SDK Git pour Windows (qui inclut pacman).
  2. Installez Git dans MSYS2.

La dernière option est ma préférée, mais elle n'est pas encore rationalisée, donc la première option est probablement plus facile. Espérons que ce sera corrigé .

PS! Je n'ai pas beaucoup joué avec MSYS2 / pacman, mais cela semble très prometteur.

Mise à jour le 7 août 2019:

Si vous utilisez Git pour Windows (Git Bash), il est préférable de simplement récupérer le package rsync à partir du référentiel de packages MSYS2, comme décrit dans la réponse ci-dessus .

hansfn
la source
malheureusement, dans Git Bash:$ mingw-get bash: mingw-get: command not found
Hendy Irawan
Oui, c'est un peu triste. Regardez ma réponse mise à jour ci-dessus - toujours triste, mais la situation s'est améliorée.
hansfn
Je suis allé pour la deuxième option et je me suis retrouvé avec un dossier de 2,17 Go, mais tout fonctionne comme un charme. J'ai installé rsync en utilisant pacman -S rsync. Dans le passé, j'utilisais CygWin mais je pense que MSYS2 est génial, je n'ai pas besoin d'exécuter une interface graphique pour installer des packages supplémentaires.
Edenshaw
Le rapport de bogue répertorié dans cette réponse a depuis été fermé comme "non réparable" - cependant, j'ai créé une demande d'extraction pour que rsync soit inclus avec Git pour Windows .
Scott Stevens
Des liens sur la façon de faire soit l'option 1 ou l'option 2? Je pense avoir Git pour Windows SDK. Je ne sais pas. Mais en supposant que je le fasse, ou que je puisse l'obtenir ... alors quoi? Sinon, je n'ai aucune idée de ce que cela signifie même d'installer Git dans MSYS2. Est-ce que cela signifie que je dois supprimer mon installation Git actuelle. Vais-je perdre quoi que ce soit, comme les paramètres ou les fonctionnalités si je le fais. Nay liens vont-ils se briser?
SherylHohman
2

Je suppose que git bashvous voulez vraiment dire msysgit, alias "git pour windows". L'option du menu Démarrer est git bash, ce qui explique le nom que vous avez utilisé.

Tout d'abord, vous avez raison de rejeter git comme option ici. Une des choses que git ne fait pas bien est la gestion des fichiers binaires - et vous vous retrouveriez avec un énorme référentiel gonflé. De plus, étant donné que vous ne gérerez pas les modifications, l'utilisation de la surcharge de git me semble exagérée.

Deuxièmement, cela ressemble à la question que vous posez réellement: "Puis-je utiliser rsync à partir de msysgit / Windows?" La réponse courte est, pas hors de la boîte. msysgitest vraiment juste la ligne de commande Windows en termes de forme et de fonction. Cela étant dit, vous avez deux options: télécharger un outil tiers pour activer rsync sur votre machine Windows ( Stack Overflow: Rsync pour Windows ), ou simplement utiliser cygwin. Vraiment, ils ont le même résultat - c'est à vous de décider lesquels fonctionnent le mieux.

Andrew M.
la source
Je peux utiliser rsync depuis mon shell cygwin, mais pas depuis msysgit. J'ai essayé de copier rsync.exe du dossier bin de cygwin vers le dossier bin de msysgit, mais il ne le trouve toujours pas. Y a-t-il une autre étape que je dois faire pour l'installer là-bas? Il est étrange que j'obtienne une erreur indiquant qu'il ne trouve pas le fichier, au lieu de me donner une erreur indiquant qu'une des dépendances du fichier est manquante. Merci, Will
Will Gant
Ce n'est tout simplement pas possible. cygwin met en place un environnement basé sur GNU, y compris des bibliothèques de type Linux, des configurations, etc. msysgitest la ligne de commande Windows, qui prend en charge les exécutables Windows. Ce qui se passe probablement, c'est qu'il n'est même pas capable de détecter le fichier comme exécutable. Autrement dit, cygwin et msysgit ne sont même pas compatibles à distance.
Andrew M.
C'est peut-être mais hacky. Copie cygiconv-2.dll, cygwin1.dllet rsync.exede Cygwin sur votre chemin de msysgit. Rien d'autre (surtout pas ssh.exe). Le problème est généralement une incompatibilité entre Git SSH et Cygwin / rsync SSH. Essayez de garder la même version. Vous aurez toujours des problèmes avec le /cygdrive/mais là, je n'ai pas de solution sauf a cd.
Wernight
0

Pour ce que ça vaut, j'avais des problèmes similaires pour que cwRsync fonctionne dans msysgit lorsqu'il était déposé dans le chemin du bac, mais après avoir essayé beaucoup de choses différentes , j'ai finalement découvert que la simple mise à jour vers la dernière version (2.10.2) de Git pour Windows corrigeait le problème.

Nick F
la source
cwRsync coûte 19 $ / an itefix.net/cwrsync
SherylHohman
0

rsync est idéal pour la synchronisation unidirectionnelle. Vous pouvez soit exécuter rsync sous cygwin, soit pour Windows il y a aussi Deltacopy

Si vous vouliez avoir une synchronisation bidirectionnelle, jetez un œil à l' unisson

Pour un outil de synchronisation d'annuaire multiplateforme, il y a synchronisation qui s'exécute sur la plupart des plates-formes.

shouldbeq931
la source
l'unisson est génial, mais vous devez l'installer sur le serveur - comme 90% des serveurs sont prêts pour rsync. Et OP a demandé rsync
pscheit
l'OP a posé des questions sur rsync, mais ce que l'OP essayait de réaliser était "d'être efficacement synchronisé entre les boîtes", et l'unisson est disponible dans la plupart des dépôts ...
shouldbeq931
Il semble que DeltaCopy ne soit pas disponible pour Windows 10. Peut-être plus maintenu?
SherylHohman
Il est difficile de dire si Unison fonctionne sur Windows 10. N'a pas eu de mise à jour depuis longtemps. Il n'y a aucune mention des versions de Windows OS prises en charge par ce logiciel. Il y a plusieurs problèmes concernant: Windows 10 github.com/bcpierce00/unison/…
SherylHohman
En tant qu'outil multi - plateforme pour maintenir une structure de répertoires synchronisés ces jours, je vous suggère syncthing syncthing.net Cependant en 2011 ....
shouldbeq931