Verwenden von rsync aus msysgit für Binärdateien


22

Ich habe drei Windows-Boxen, die auf verschiedene Arten mit einer Linux-Box in meinem Netzwerk verbunden sind (eine ist lokal im Netzwerk, eine ist ein Laptop und kann lokal sein oder nicht, und die andere ist mein Arbeitsdesktop). Ich benutze derzeit git, um die meisten meiner Sachen zwischen den Boxen zu synchronisieren (unter Verwendung der Linux-Box als Server) und es funktioniert wie ein Champion.

Jetzt möchte ich jedoch auch meine MP3-Sammlung (12 Gigs) hinzufügen, um eine effiziente Synchronisierung zwischen Boxen zu ermöglichen. Anfangs dachte ich, ich könnte git dafür verwenden, aber es sieht so aus, als wäre rsync eine bessere Wahl, da ich nicht wirklich alle historischen Dinge brauche. Da alle meine vorhandenen Verwaltungsskripte unter git bash (anstelle von cygwin) ausgeführt werden, möchte ich sie über git bash verwenden können (MINGW32 steht in der Titelleiste des Fensters). Kann ich es einfach in Cygwin herunterladen und kopieren oder gibt es einen besseren Weg, es zu erreichen? Auf der Linux-Box wird die neueste Version von Ubuntu Server Edition ausgeführt. Muss ich irgendetwas tun, damit rsync ordnungsgemäß funktioniert?

Mir ist klar, dass ich das wahrscheinlich etwas härter mache als nötig, aber ich benutze es auch als Übung, um meine Kommandozeilenfähigkeiten zu verbessern. Irgendwelche Vorschläge?


Ich kann rsync von meiner Cygwin-Shell aus verwenden, aber nicht von msysgit. Ich habe versucht, rsync.exe aus dem bin-Ordner von cygwin in den bin-Ordner von msysgit zu kopieren, aber es wird immer noch nicht gefunden. Muss ich noch einen weiteren Schritt ausführen, um es dort zu installieren? Es ist seltsam, dass ich einen Fehler erhalte, dass die Datei nicht gefunden werden kann, anstatt mir einen Fehler zu melden, dass eine der Abhängigkeiten der Datei fehlt.

Antworten:


25

Ab sofort (07.09.2017) ist es extrem einfach, der Git for Windows-Umgebung rsync-Unterstützung manuell hinzuzufügen, ohne dass das Git for Windows-SDK ausgeführt werden muss.

Ich bin über diesen Beitrag gestolpert und habe nicht gedacht, dass es bei all den Alternativen wirklich so einfach sein könnte, aber es ist wirklich so. Alles, was Sie tun müssen, ist, das rsync-Paket aus dem MSYS2-Paket-Repository zu holen und die rsync.exeDatei in zu extrahieren C:\Program Files\Git\usr\bin. Eins und fertig. Es klappt.

Wenn Sie Hilfe beim Extrahieren rsync.exeaus dem rsync-Paket (das im tar.xzFormat vorliegt) benötigen, können Sie entweder ein Komprimierungsprogramm wie 7zip verwenden oder es direkt in der Git for Windows-Bash-Umgebung wie folgt ausführen:

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

Dadurch erhalten Sie die rsync.exeDatei am heruntergeladenen Speicherort (passen Sie den Paketnamen entsprechend an). Angesichts von Windows-Berechtigungsproblemen werde ich nicht versuchen, bestimmte Befehle zum Abrufen der Exe in den C:\Program Files\Git\usr\binOrdner zu geben. Sie können es über eine Explorer-GUI oder über ein erweitertes Befehlszeilendienstprogramm kopieren (und ja, es sind Administratorrechte erforderlich, um etwas in die Ordner "Programme" zu kopieren).

Wenn Sie die Pageant-Authentifizierung auch mit rsync über ssh verwenden möchten, ist die ssh-pageant-Binärdatei bereits in Git für Windows installiert, und Sie müssen Ihrer Datei ~/.bashrcoder lediglich ein wenig hinzufügen ~/.bash_profile(siehe Abschnitt zur Verwendung von ssh-pageant und Git für Windows-Wiki ). Ich habe es speziell für die Verwendung mit der Git für Windows-Umgebung modifiziert und es mit einer gewissen Erkennung für eine fehlende Socket-Datei erweitert:

# 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

Ich kann nicht darüber sprechen, wie andere Dienstprogramme funktionieren oder nicht, indem ich sie manuell auf diese Weise installiere, aber rsync scheint einwandfrei zu funktionieren. Hoffentlich bleibt das Repo bestehen und wird weiterhin aktualisiert - ich denke schon, weil es auf der offiziellen MSYS2-Site gehostet wird.


1
danke sir, download und es funktioniert .. wer hätte es gewusst ...
18.11.17

Problem. Es gibt nicht rsync.exenur verschiedene Versionen von rsync in .pkg.tar.xz Formaten. Das mag in Ordnung sein, außer , dass ich nicht installieren kann apt-get install xz-utils( sudo apt-get install xz-utils) , weil ich weder installieren sudooder apt-getzu Git Bash für Windows :-( und damit also nicht installiert werden kann xz-utils. Gibt es eine Möglichkeit , um dies? Gibt es einen neuen Link , wo ich bekommen kann rsync.exe, oder
Irgendwie

Eigentlich scheint es eher ein Berechtigungsproblem zu sein. Als ich tar -xf rsync-3.1.3-1-x86_64.pkg.tar.xz, ich ein paar Nachrichten bekommen besagt: Cannot open: Permission denied, Cannot mkdir: Permission denied, Cannot mkdir: No such file or directoryund Cannot open: No such file or directoryfür verschiedene Dateien / Verzeichnisse. Vielleicht weiß Git Bash schon, wie man xzDateien dekomprimiert ? Aber können nicht von Berechtigungen b / e? Ich kann nicht verwenden oder installieren sudo. zu Git Bash.
SherylHohman

Angenommen, Sie haben die tar.xz-Datei in Ihren Downloads-Ordner heruntergeladen und können sie mit folgendem cd / && tar Jxvf /c/Users/$USR/Downloads/rsync-3.1.3-1-x86_64.pkg.tar.xz
Befehl

@SherylHohman Sie müssen die exe manuell aus der Paketdatei extrahieren. Es ist keine "Installation" notwendig, außer die exe einfach in den C:\Program Files\Git\usr\binOrdner zu legen.
nextgentech

7

Ich weiß, dass die Frage nicht "Verwenden von rsync für MSYS" ist, aber ich denke, dies zu erwähnen ist relevant:

"MinGW Shell" (früher bekannt als "MSYS (Basic System)") hat in der Tat rsync. Ich benutze diese Shell / dieses System so oft wie möglich, da es viel kleiner als Cygwin ist. (Ich bin wahrscheinlich der einzige, der sich heutzutage um die Dateigröße kümmert.)

"Git für Windows" / "Git Bash" kann leicht rsync hinzufügen, da es auf MinGW / MSYS basiert und bereits in der Mailingliste erwähnt wurde.

PS! Wenn Ihre MinGW-Shell nicht über rsync verfügt, führen Sie einfach "mingw-get install msys-rsync" aus, um es hinzuzufügen.

Aktualisiert am 25. März 2016:

Git für Windows verwendet jetzt MSYS2. Und MSYS2 verwendet "pacman" und nicht "mingw-get", um Pakete zu installieren. Leider enthält "Git for Windows" kein Pacman ... Es gibt zwei Möglichkeiten:

  1. Installieren Sie das Git für Windows SDK (das Pacman enthält).
  2. Installieren Sie Git in MSYS2.

Die letzte Option ist meine Lieblingsoption, aber sie ist noch nicht optimiert, sodass die erste Option wahrscheinlich einfacher ist. Hoffentlich wird es behoben .

PS! Ich habe nicht viel mit MSYS2 / Pacman gespielt, aber es scheint sehr vielversprechend.

Aktualisiert am 7. August 2019:

Wenn Sie Git für Windows (Git Bash) verwenden, ist es viel besser, das rsync-Paket aus dem MSYS2-Paket-Repository abzurufen, wie in der obigen Antwort beschrieben .


Leider in Git Bash:$ mingw-get bash: mingw-get: command not found
Hendy Irawan

Ja, es ist ein bisschen traurig. Schau dir meine aktualisierte Antwort oben an - immer noch traurig, aber die Situation hat sich verbessert.
Hansfn

Ich entschied mich für die zweite Option und landete mit einem 2,17 GB Ordner, aber alles funktioniert wie ein Zauber. Ich habe rsync mit installiert pacman -S rsync. In der Vergangenheit habe ich CygWin verwendet, aber MSYS2 finde ich großartig. Ich muss keine GUI ausführen, um zusätzliche Pakete zu installieren.
Edenshaw

Der in dieser Antwort aufgeführte Fehlerbericht wurde inzwischen als "unfixable" geschlossen. Ich habe jedoch eine Pull-Anfrage erstellt, um rsync in Git für Windows aufzunehmen .
Scott Stevens

Gibt es Links zu Option 1 oder Option 2? Ich glaube, ich habe Git für Windows SDK. Keine Ahnung. Aber wenn ich das tue, oder kann ich es bekommen ... was dann? Wenn nicht, habe ich keine Ahnung, was es überhaupt bedeutet, Git in MSYS2 zu installieren. Bedeutet das, dass ich meine aktuelle Git-Installation löschen muss? Verliere ich etwas, wie Einstellungen oder Funktionen, wenn ich dies tue? Werden keine Links brechen?
SherylHohman

2

Ich nehme an, git bashdu meinst wirklich msysgit"git for windows". Die Option Startmenü ist git bash, die den von Ihnen verwendeten Namen erklärt.

Erstens ist es richtig, hier git als Option zu verwerfen. Eines der Dinge, die GIT nicht gut macht, ist der Umgang mit Binärdateien - und Sie würden am Ende ein riesiges, aufgeblähtes Repository haben. Da Sie sich nicht um Änderungen kümmern müssen, erscheint mir die Verwendung des Overheads von git als Overkill.

Zweitens klingt es so, als ob die Frage, die Sie tatsächlich stellen, lautet: "Kann ich rsync von msysgit / Windows aus verwenden?" Die kurze Antwort ist, nicht out of the box. msysgitist wirklich nur die Windows-Befehlszeile in Bezug auf Form und Funktion. Davon abgesehen haben Sie zwei Möglichkeiten: Laden Sie ein Tool eines Drittanbieters herunter, um rsync auf Ihrem Windows-Computer zu aktivieren ( Stapelüberlauf: Rsync für Windows ), oder verwenden Sie einfach cygwin. Wirklich, sie haben das gleiche Ergebnis - es liegt also an Ihnen, zu entscheiden, welche besser funktionieren.


Ich kann rsync von meiner Cygwin-Shell aus verwenden, aber nicht von msysgit. Ich habe versucht, rsync.exe aus dem bin-Ordner von cygwin in den bin-Ordner von msysgit zu kopieren, aber es wird immer noch nicht gefunden. Muss ich noch einen weiteren Schritt ausführen, um es dort zu installieren? Es ist seltsam, dass ich einen Fehler erhalte, dass die Datei nicht gefunden werden kann, anstatt mir einen Fehler zu melden, dass eine der Abhängigkeiten der Datei fehlt. Vielen Dank, Will
Will Gant

Das ist einfach nicht möglich. cygwin richtet eine GNU-basierte Umgebung ein, einschließlich Linux-ähnlicher Bibliotheken, Konfigurationen usw. msysgitist die Windows-Befehlszeile, die ausführbare Windows-Dateien unterstützt. Was wahrscheinlich passiert, ist, dass es nicht einmal in der Lage ist, die Datei als ausführbar zu erkennen. Einfach ausgedrückt, sind cygwin und msysgit nicht einmal aus der Ferne kompatibel.
Andrew M.

Es ist möglicherweise aber hacky. Kopieren cygiconv-2.dll, cygwin1.dllund rsync.exevon Cygwin zu Ihrem msysgit Weg. Sonst nichts (besonders nicht ssh.exe). Das Problem ist normalerweise eine Inkompatibilität zwischen Git SSH und Cygwin / rsync SSH. Versuchen Sie, die gleiche Version beizubehalten. Du wirst immer noch Probleme mit dem haben, /cygdrive/aber da habe ich keine Lösung außer einer cd.
Wernight,

0

Für das, was es wert ist, hatte ich ähnliche Probleme, cwRsync in msysgit zum Laufen zu bringen, als ich es in den Bin-Pfad legte, aber nachdem ich viele verschiedene Dinge ausprobiert hatte, stellte sich heraus, dass das einfache Aktualisieren auf die neueste Version (2.10.2) von Git für Windows das Problem behoben hatte Problem.


cwRsync ist $ 19 / Jahr itefix.net/cwrsync
SherylHohman

0

rsync eignet sich hervorragend für die unidirektionale Synchronisierung. Sie können entweder rsync unter cygwin ausführen oder für Windows gibt es auch Deltacopy

Wenn Sie eine bidirektionale Synchronisierung wünschen, schauen Sie sich unisono an

Für ein plattformübergreifendes Verzeichnissynchronisierungstool gibt es Synchronisierungen, die auf den meisten Plattformen ausgeführt werden.


unison ist großartig, aber du musst es auf dem Server installieren - so wie 90% der Server rsync-fähig sind. Und OP bat um rsync
pscheit 18.11.17

das OP fragte nach rsync, aber das Ziel des OP war es, "zwischen Boxen effizient synchronisiert zu werden", und in den meisten Repos ist Unisono verfügbar ...
shouldbeq931

Es sieht so aus, als ob DeltaCopy für Windows 10 nicht verfügbar ist. Kann es nicht mehr gepflegt werden?
SherylHohman

Es ist schwer zu sagen, ob Unison unter Windows 10 funktioniert. Seit langer Zeit gab es kein Update mehr. Es wird nicht erwähnt, welche Versionen des Windows-Betriebssystems diese Software unterstützt. Es gibt verschiedene Probleme
bezüglich

Als plattformübergreifendes Tool, um eine Verzeichnisstruktur in diesen Tagen synchron zu halten, würde ich syncthing.net empfehlen. Allerdings im Jahr 2011 ....
shouldbeq931
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.