Utilizzo di rsync da msysgit per i file binari


22

Ho tre box di Windows che sono collegati a un box di Linux sulla mia rete in vari modi (uno locale alla rete, uno è un laptop e può essere o meno locale e l'altro è il mio desktop di lavoro). Attualmente sto usando Git per sincronizzare la maggior parte delle mie cose tra le scatole (usando la scatola Linux come server) e funziona come un campione.

Ora, tuttavia, vorrei anche aggiungere la mia collezione di MP3 (12 concerti) per essere sincronizzata in modo efficiente tra le scatole. Inizialmente pensavo di poter usare git per questo, ma sembra che rsync sarebbe una scelta migliore dal momento che non ho davvero bisogno di tutte le cose storiche. Poiché tutti i miei script di gestione esistenti vengono eseguiti con git bash (anziché cygwin), mi piacerebbe poterlo usare da git bash (MINGW32 è ciò che dice nella barra del titolo della finestra). Posso semplicemente scaricarlo su Cygwin e copiarlo o esiste un modo migliore per affrontarlo? La confezione di Linux esegue l'ultima versione di Ubuntu Server Edition - devo fare qualcosa per consentire a rsync di funzionare correttamente su di essa?

Mi rendo conto che probabilmente lo sto facendo in un modo leggermente più difficile di quanto sia necessario, ma sto anche usando questo come esercizio per migliorare le mie capacità da riga di comando. Eventuali suggerimenti?


Posso usare rsync dalla mia shell cygwin, ma non da msysgit. Ho provato a copiare rsync.exe dalla cartella bin di cygwin nella cartella bin di msysgit, ma non lo trovo ancora. C'è qualche altro passo che devo fare per installarlo lì? È strano che sto ricevendo un errore che non riesce a trovare il file, invece di darmi un errore che manca una delle dipendenze del file.

Risposte:


25

A partire da ora (9/7/2017) è estremamente facile aggiungere manualmente il supporto rsync all'ambiente Git per Windows senza nemmeno dover ricorrere all'esecuzione di Git per Windows SDK.

Mi sono imbattuto in questo post e non pensavo che potesse essere così facile date tutte le alternative, ma lo è davvero. Tutto quello che devi fare è prendere il pacchetto rsync dal repository dei pacchetti MSYS2 ed estrarre il rsync.exefile C:\Program Files\Git\usr\bin. Uno e fatto. Funziona.

Se hai bisogno di aiuto per estrarre rsync.exedal pacchetto rsync (che è in tar.xzformato), puoi usare un'utilità di compressione come 7zip o farlo direttamente nell'ambiente bash di Git per Windows in questo modo:

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

Questo ti dà il rsync.exefile nella posizione scaricata (regola il nome del pacchetto di conseguenza). Alla luce dei problemi con le autorizzazioni di Windows, non proverò a dare comandi specifici su come ottenere l'exe nella C:\Program Files\Git\usr\bincartella. Puoi copiarlo tramite una GUI di Explorer o tramite un'utilità della riga di comando elevata (e sì, richiederà le autorizzazioni a livello di amministratore per copiare qualcosa nelle cartelle dei Programmi).

Se vuoi usare anche l'autenticazione Pageant con rsync su ssh, il binario ssh-pageant è già installato in Git per Windows e tutto ciò che devi fare è aggiungere un piccolo bit al tuo ~/.bashrco al tuo ~/.bash_profilefile (vedi la sezione uso di ssh-pageant e Git per Wiki di Windows ). L'ho modificato specificatamente per l'uso con l'ambiente Git per Windows e l'ho migliorato con qualche rilevamento per un file socket mancante:

# 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

Non posso parlare di come altre utilità potrebbero o meno funzionare installandole manualmente in questo modo, ma rsync sembra funzionare bene. Spero che il repository rimanga e continui ad essere aggiornato - lo penserei perché è ospitato sul sito ufficiale MSYS2.


1
grazie signore, il download e funziona .. chi avrebbe saputo ...
pscheit il

Problema. Non ci sono rsync.exesolo varie versioni di rsync nei .pkg.tar.xz formati. Potrebbe essere OK, tranne per il fatto che non riesco a installare apt-get install xz-utils( sudo apt-get install xz-utils) perché non posso né installare sudoOR apt-getsu Git Bash per Windows :-( e quindi non posso installarlo xz-utils. C'è un modo per aggirare questo? C'è un collegamento più recente dove posso ottenere rsync.exe, o in qualche modo posso convincere Git Bash a decomprimere questo file
.xz

In realtà, sembra essere più un problema di autorizzazioni. Quando io tar -xf rsync-3.1.3-1-x86_64.pkg.tar.xz, ho un sacco di messaggi affermando: Cannot open: Permission denied, Cannot mkdir: Permission denied, Cannot mkdir: No such file or directorye Cannot open: No such file or directoryper vari file / directory. Forse Git Bash sa già come decomprimere i xzfile? Ma non è possibile accedere alle autorizzazioni? Non riesco a utilizzare o installare sudo. a Git Bash.
SherylHohman,

Supponendo di aver scaricato il file tar.xz nella cartella Download, è possibile decomprimerlo da Git Bash utilizzando:cd / && tar Jxvf /c/Users/$USR/Downloads/rsync-3.1.3-1-x86_64.pkg.tar.xz
hansfn

@SherylHohman devi estrarre manualmente l'exe dal file del pacchetto. Non è necessaria alcuna "installazione" oltre al semplice rilascio dell'exe nella C:\Program Files\Git\usr\bincartella.
nextgentech,

7

So che la domanda non è "Utilizzo di rsync per MSYS", ma penso che menzionarlo sia rilevante:

"MinGW Shell" (precedentemente meglio noto come "MSYS (Basic System)") ha effettivamente rsync. Sto usando quella shell / sistema il più spesso possibile poiché è molto più piccolo di Cygwin. (Sono probabilmente l'unico che si preoccupa delle dimensioni dei file in questi giorni.)

"Git per Windows" / "Git Bash" potrebbe facilmente aggiungere rsync poiché basato su MinGW / MSYS ed è stato menzionato nella mailing list in precedenza.

PS! Se la tua MinGW Shell non ha rsync, esegui semplicemente "mingw-get install msys-rsync" per aggiungerla.

25 marzo 2016 aggiornato:

Git per Windows ora utilizza MSYS2. E MSYS2 usa "pacman", non "mingw-get", per installare i pacchetti. Sfortunatamente, "Git per Windows" non include pacman ... Ci sono due opzioni:

  1. Installa Git per Windows SDK (che include pacman).
  2. Installa Git all'interno di MSYS2.

L'ultima opzione è la mia preferita, ma non è ancora ottimizzata, quindi la prima opzione è probabilmente più semplice. Eventualmente, sarà risolto .

PS! Non ho giocato molto con MSYS2 / pacman, ma sembra molto promettente.

Aggiornato il 7 agosto 2019:

Se stai usando Git per Windows (Git Bash) è molto meglio semplicemente prendere il pacchetto rsync dal repository dei pacchetti MSYS2, come descritto nella risposta sopra .


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

Sì, è un po 'triste. Guarda la mia risposta aggiornata sopra - ancora triste, ma la situazione è migliorata.
Hansfn,

Ho scelto la seconda opzione e ho finito con una cartella da 2,17 GB, ma tutto funziona come un fascino. Ho installato rsync usando pacman -S rsync. In passato ho usato CygWin ma penso che MSYS2 sia fantastico, non devo eseguire una GUI per installare pacchetti extra.
Edenshaw,

La segnalazione di bug elencata in questa risposta è stata chiusa come "non risolvibile", tuttavia ho creato una richiesta pull per includere rsync con Git per Windows .
Scott Stevens,

Qualche link su come fare l'opzione 1 o l'opzione 2? Penso di avere Git per Windows SDK. Boh. Ma supponendo di si, o posso ottenerlo .. e allora? In caso contrario, non ho idea di cosa significhi anche installare Git all'interno di MSYS2. Significa che devo cancellare la mia attuale installazione di Git. Se perdo qualcosa, come impostazioni o funzionalità. Nay link si romperà?
SherylHohman,

2

Presumo che git bashtu intenda davvero msysgit, noto anche come "git for windows". L'opzione del menu Start è git bash, che spiega il nome che hai usato ..

Per prima cosa, hai ragione nel respingere git come opzione qui. Una delle cose che git non fa bene è la gestione dei file binari - e finiresti con un enorme repository gonfio. Inoltre, poiché non gestirai le modifiche, usare l'overhead di git mi sembra eccessivo.

In secondo luogo, sembra che la domanda che stai effettivamente ponendo sia "Posso usare rsync da msysgit / Windows?" La risposta breve è, non pronta all'uso. msysgitè davvero solo la riga di comando di Windows in termini di forma e funzione. Detto questo, hai due opzioni: scarica uno strumento di terze parti per abilitare rsync sul tuo computer Windows ( StackTranslate.it: Rsync per Windows ) o usa semplicemente cygwin. Davvero, hanno lo stesso risultato, quindi spetta a te decidere quali funzionano meglio.


Posso usare rsync dalla mia shell cygwin, ma non da msysgit. Ho provato a copiare rsync.exe dalla cartella bin di cygwin nella cartella bin di msysgit, ma non lo trovo ancora. C'è qualche altro passo che devo fare per installarlo lì? È strano che sto ricevendo un errore che non riesce a trovare il file, invece di darmi un errore che manca una delle dipendenze del file. Grazie, Will
Will Gant,

Questo semplicemente non è possibile. cygwin imposta un ambiente basato su GNU, incluse librerie simili a Linux, configurazioni, ecc. msysgitè la riga di comando di Windows, che supporta gli eseguibili di Windows. Ciò che sta probabilmente accadendo è che non è nemmeno in grado di rilevare il file come eseguibile. In poche parole, cygwin e msysgit non sono nemmeno compatibili a distanza.
Andrew M.,

È forse ma hacky. Copia cygiconv-2.dll, cygwin1.dlle rsync.exedal Cygwin al percorso msysgit. Nient'altro (soprattutto non ssh.exe). Il problema è di solito un'incompatibilità tra Git SSH e Cygwin / rsync SSH. Prova a mantenere la stessa versione. Avrai ancora problemi con il /cygdrive/ma non ho soluzione tranne a cd.
Wernight,

0

Per quel che vale, ho avuto problemi simili che ottengono cwRsync al lavoro in msysgit in caso di caduta nel percorso bin, ma dopo aver provato un sacco di cose diverse alla fine ha trovato che semplicemente l'aggiornamento alla versione più recente (2.10.2) del Git per Windows fissato il problema.



0

rsync è un ottimo strumento per la sincronizzazione unidirezionale. Puoi eseguire rsync con cygwin o per Windows c'è anche Deltacopy

Se desideri avere la sincronizzazione bidirezionale, dai un'occhiata all'unisono

Per uno strumento di sincronizzazione della directory multipiattaforma, esiste la sincronizzazione che viene eseguita sulla maggior parte delle piattaforme.


l'unisono è eccezionale, ma è necessario installarlo sul server, come se il 90% dei server fosse pronto per rsync. E OP ha chiesto rsync
pscheit il

l'OP chiesto di rsync, ma la cosa l'OP stava cercando di raggiungere è stato "per essere sincronizzati in modo efficiente tra scatole", e all'unisono è disponibile nella maggior parte dei pronti contro termine ...
shouldbeq931

Sembra che DeltaCopy non sia disponibile per Windows 10. Non può più essere gestito?
SherylHohman,

È difficile dire se Unison funziona su Windows 10. Non ha un aggiornamento da molto tempo. Non si fa menzione delle versioni del sistema operativo Windows supportate da questo software. Esistono diversi problemi relativi a: Windows 10 github.com/bcpierce00/unison/…
SherylHohman

Come strumento multipiattaforma per mantenere sincronizzata una struttura di directory in questi giorni, suggerirei syncthing syncthing.net Tuttavia nel 2011 ....
shouldbeq931
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.