Używanie rsync z msysgit dla plików binarnych

22

Mam trzy okna systemu Windows, które są połączone z linuxem w mojej sieci na różne sposoby (jeden lokalny w sieci, jeden jest laptopem i może być lokalny, a drugi to mój pulpit roboczy). Obecnie używam git do synchronizacji większości moich rzeczy między urządzeniami (używając Linuxa jako serwera) i działa jak mistrz.

Teraz jednak chciałbym również dodać moją kolekcję MP3 (12 koncertów), aby skutecznie synchronizować między urządzeniami. Początkowo myślałem, że mogę do tego użyć git, ale wygląda na to, że rsync byłby lepszym wyborem, ponieważ tak naprawdę nie potrzebuję wszystkich historycznych rzeczy. Ponieważ wszystkie moje istniejące skrypty zarządzania działają pod git bash (zamiast cygwin), chciałbym móc używać go z git bash (MINGW32 to, co jest napisane w pasku tytułowym okna). Czy mogę po prostu pobrać go w Cygwin i skopiować go, czy jest lepszy sposób na to? Linux zawiera najnowszą wersję Ubuntu Server Edition - czy muszę coś zrobić, aby rsync działał poprawnie na nim?

Zdaję sobie sprawę, że prawdopodobnie robię to w nieco trudniejszy sposób, niż jest to potrzebne, ale używam tego również jako ćwiczenia do doskonalenia umiejętności w zakresie poleceń. Jakieś sugestie?


Mogę używać rsync z mojej powłoki cygwin, ale nie z msysgit. Próbowałem skopiować rsync.exe z folderu bin cygwina do folderu bin msysgita, ale nadal nie można go znaleźć. Czy jest jakiś inny krok, aby go zainstalować? Dziwne jest to, że pojawia się błąd polegający na tym, że nie można znaleźć pliku, zamiast dać mi błąd, że brakuje jednej z zależności pliku.

Will Gant
źródło

Odpowiedzi:

25

Na dzień dzisiejszy (9.7.2017) niezwykle łatwo jest ręcznie dodać obsługę rsync do środowiska Git dla Windows bez konieczności uciekania się do uruchamiania Git dla Windows SDK.

Natknąłem się na ten post i nie sądziłem, że może to być tak łatwe, biorąc pod uwagę wszystkie alternatywy, ale tak naprawdę jest. Wystarczy pobrać pakiet rsync z repozytorium pakietów MSYS2 i wyodrębnić rsync.exeplik C:\Program Files\Git\usr\bin. Jeden i gotowe. To działa.

Jeśli potrzebujesz pomocy w wyodrębnieniu rsync.exez pakietu rsync (który jest w tar.xzformacie), możesz albo użyć narzędzia do kompresji, takiego jak 7zip, lub zrobić to bezpośrednio w środowisku bash Git for Windows:

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

Daje to rsync.exeplik w pobranej lokalizacji (odpowiednio dostosuj nazwę pakietu). W świetle problemów z uprawnieniami systemu Windows nie będę próbował wydawać określonych poleceń dotyczących pobierania pliku exe do C:\Program Files\Git\usr\binfolderu. Możesz skopiować to za pomocą GUI eksploratora lub narzędzia z podwyższonym poziomem wiersza poleceń (i tak, będzie to wymagało uprawnień na poziomie administratora, aby skopiować coś do folderów Program Files).

Jeśli chcesz także używać uwierzytelniania Pageant z rsync przez ssh, plik binarny ssh-pageant jest już zainstalowany w Git dla Windows i wszystko, co musisz zrobić, to dodać trochę do swojego pliku ~/.bashrclub ~/.bash_profilepliku (zobacz sekcję dotyczącą użycia ssh-pageant i Git dla Wiki systemu Windows ). Zmodyfikowałem go specjalnie do użytku ze środowiskiem Git dla Windows i ulepszyłem go, wykrywając brakujący plik gniazda:

# 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

Nie mogę porozmawiać o tym, jak inne narzędzia mogą działać lub nie, ręcznie instalując je w ten sposób, ale rsync wydaje się działać dobrze. Mam nadzieję, że repozytorium pozostanie i będzie nadal aktualizowane - tak mi się wydaje, ponieważ jest hostowane na oficjalnej stronie MSYS2.

nextgentech
źródło
1
dziękuję panu, pobieranie i działa ... kto by wiedział ...
pscheit
Problem. Istnieją nie rsync.exetylko różne wersje rsync w .pkg.tar.xz formatach. To może być OK, z wyjątkiem tego, że nie mogę zainstalować apt-get install xz-utils( sudo apt-get install xz-utils), ponieważ nie mogę zainstalować sudoLUB apt-getw Git Bash dla Windows :-( i tym samym nie mogę zainstalować xz-utils. Czy jest jakiś sposób na obejście tego? Czy istnieje nowszy link, gdzie mogę uzyskać rsync.exe, lub w jakiś sposób mogę zmusić Git Bash do rozpakowania tego pliku .xz?
SherylHohman
W rzeczywistości wydaje się, że jest to raczej problem z uprawnieniami. Kiedy tar -xf rsync-3.1.3-1-x86_64.pkg.tar.xzotrzymuję kilka komunikatów stwierdzające, że: Cannot open: Permission denied, Cannot mkdir: Permission denied, Cannot mkdir: No such file or directoryi Cannot open: No such file or directorydla różnych plików / katalogów. Może Git Bash już wie, jak rozpakować xzpliki? Ale czy b / e uprawnień nie jest możliwe? Nie mogę użyć ani zainstalować sudo. do Git Bash.
SherylHohman
Zakładając, że pobrałeś plik tar.xz do folderu Pobrane, możesz go rozpakować z Git Bash, używając:cd / && tar Jxvf /c/Users/$USR/Downloads/rsync-3.1.3-1-x86_64.pkg.tar.xz
hansfn
@ SherylHohman musisz ręcznie wyodrębnić plik exe z pliku pakietu. Nie jest wymagana „instalacja” poza upuszczeniem pliku exe do C:\Program Files\Git\usr\binfolderu.
nextgentech
7

Wiem, że pytanie nie brzmi „Używanie rsync dla MSYS”, ale myślę, że wspomnienie o tym jest istotne:

„MinGW Shell” (wcześniej najlepiej znany jako „MSYS (Basic System)”) rzeczywiście ma rsync. Używam tej powłoki / systemu tak często, jak to możliwe, ponieważ jest ona znacznie mniejsza niż Cygwin. (Prawdopodobnie jestem jedynym, który obecnie dba o rozmiary plików).

„Git dla Windows” / „Git Bash” może łatwo dodać rsync, ponieważ jest oparty na MinGW / MSYS i został wspomniany wcześniej na liście mailingowej.

PS! Jeśli twoja powłoka MinGW nie ma rsync, po prostu uruchom „mingw-get install msys-rsync”, aby go dodać.

Zaktualizowano 25 marca 2016 r .:

Git dla Windows używa teraz MSYS2. MSYS2 używa „pacman”, a nie „mingw-get”, do instalowania pakietów. Niestety „Git dla Windows” nie obejmuje Pacmana ... Istnieją dwie opcje:

  1. Zainstaluj Git dla Windows SDK (który zawiera pacman).
  2. Zainstaluj Git w MSYS2.

Ostatnia opcja jest moją ulubioną, ale nie została jeszcze usprawniona, więc pierwsza opcja jest prawdopodobnie łatwiejsza. Mamy nadzieję, że zostanie to naprawione .

PS! Nie grałem dużo z MSYS2 / pacman, ale wydaje się to bardzo obiecujące.

Zaktualizowano 7 sierpnia 2019 r .:

Jeśli używasz Git dla Windows (Git Bash), o wiele lepiej jest po prostu pobrać pakiet rsync z repozytorium pakietów MSYS2, jak opisano w odpowiedzi powyżej .

hansfn
źródło
niestety w Git Bash:$ mingw-get bash: mingw-get: command not found
Hendy Irawan
Tak, to trochę smutne. Spójrz na moją zaktualizowaną odpowiedź powyżej - wciąż smutną, ale sytuacja się poprawiła.
hansfn
Wybrałem drugą opcję i skończyłem z folderem 2,17 GB, ale wszystko działa jak urok. Zainstalowałem rsync za pomocą pacman -S rsync. W przeszłości korzystałem z CygWin, ale myślę, że MSYS2 jest niesamowity, nie muszę uruchamiać GUI, aby zainstalować dodatkowe pakiety.
Edenshaw
Raport o błędach wymieniony w tej odpowiedzi został odtąd zamknięty jako „niemożliwy do naprawienia” - jednak utworzyłem żądanie ściągnięcia, aby rsync był dołączony do Git dla Windows .
Scott Stevens
Jakieś linki, jak zrobić opcję 1 lub opcję 2? Myślę, że mam Git dla Windows SDK. Dunno. Ale zakładając, że to zrobię, czy mogę to zdobyć ... co wtedy? Jeśli nie, nie mam pojęcia, co to znaczy nawet zainstalować Git w MSYS2. Czy to oznacza, że ​​muszę usunąć moją bieżącą instalację Git. Czy jeśli to zrobię, stracę cokolwiek, na przykład ustawienia lub funkcjonalność. Czy nie zostaną zerwane linki?
SherylHohman
2

Zakładam, git bashże naprawdę masz na myśli msysgit, aka „git for windows”. Opcja menu Start to git bash, która wyjaśnia nazwę, której użyłeś ..

Po pierwsze, masz rację, odrzucając git jako opcję tutaj. Jedną z rzeczy git jest nie dobrze jest obsługa plików binarnych - i chcesz skończyć z ogromnym, nadęty repozytorium. Dodatkowo, ponieważ nie będziesz obsługiwał zmian, użycie narzutu git wydaje mi się przesadą.

Po drugie, wydaje się, że pytanie, które faktycznie zadajesz, brzmi: „Czy mogę używać rsync z msysgit / Windows?” Krótka odpowiedź brzmi: nie po wyjęciu z pudełka. msysgitto tak naprawdę tylko wiersz poleceń systemu Windows pod względem formy i funkcji. Biorąc to pod uwagę, masz dwie opcje: pobierz narzędzie innej firmy, aby włączyć rsync na swoim komputerze z systemem Windows ( Stack Overflow: Rsync dla Windows ), lub po prostu użyj cygwin. Naprawdę mają ten sam wynik - więc od Ciebie zależy, które z nich będą działać lepiej.

Andrew M.
źródło
Mogę używać rsync z mojej powłoki cygwin, ale nie z msysgit. Próbowałem skopiować rsync.exe z folderu bin cygwina do folderu bin msysgita, ale nadal nie można go znaleźć. Czy jest jakiś inny krok, aby go zainstalować? Dziwne jest to, że pojawia się błąd polegający na tym, że nie można znaleźć pliku, zamiast dać mi błąd, że brakuje jednej z zależności pliku. Dzięki, Will
Will Gant,
To po prostu niemożliwe. cygwin konfiguruje środowisko oparte na GNU, w tym biblioteki podobne do systemu Linux, konfiguracje itp. msysgitto linia poleceń systemu Windows, która obsługuje pliki wykonywalne systemu Windows. Prawdopodobnie dzieje się tak, że nawet nie jest w stanie wykryć pliku jako wykonywalnego. Mówiąc najprościej, cygwin i msysgit nie są nawet zdalnie kompatybilne.
Andrew M.
To możliwe, ale hacky. Kopiuj cygiconv-2.dll, cygwin1.dlla rsync.exeod Cygwin do ścieżki msysgit. Nic więcej (szczególnie nie ssh.exe). Problemem jest zwykle niezgodność między Git SSH a Cygwin / rsync SSH. Staraj się zachować tę samą wersję. Nadal będziesz mieć problemy z, /cygdrive/ale nie mam rozwiązania oprócz cd.
Wernight
0

Warto było mieć podobne problemy z uruchomieniem cwRsync w msysgit po upuszczeniu na ścieżkę bin, ale po wypróbowaniu wielu różnych rzeczy w końcu okazało się, że po prostu aktualizacja do najnowszej wersji (2.10.2) Git dla Windows naprawiła kwestia.

Nick F.
źródło
cwRsync kosztuje 19 USD / rok itefix.net/cwrsync
SherylHohman
0

rsync jest doskonałym narzędziem do synchronizacji jednokierunkowej. Możesz uruchomić rsync w programie cygwin lub w systemie Windows dostępna jest także Deltacopy

Jeśli chcesz mieć synchronizację dwukierunkową, spójrz na unisono

Dla przekroju narzędzia synchronizacji katalogów platforma istnieje syncthing który działa na większości platform.

shouldbeq931
źródło
unison jest świetny, ale musisz go zainstalować na serwerze - tak jak 90% serwerów jest gotowych na rsync. I OP poprosił o rsync
pscheit
OP zapytał o rsync, ale to, co OP chciał osiągnąć, to „być zsynchronizowanym między skrzynkami”, a unis jest dostępny w większości repo ...
być 1931
Wygląda na to, że DeltaCopy nie jest dostępna dla systemu Windows 10. Czy nie można go dłużej utrzymywać?
SherylHohman
Trudno stwierdzić, czy Unison działa w systemie Windows 10. Od dłuższego czasu nie był aktualizowany. Nie ma wzmianki o tym, jakie wersje systemu operacyjnego Windows są obsługiwane przez to oprogramowanie. Istnieje kilka problemów dotyczących: Windows 10 github.com/bcpierce00/unison/…
SherylHohman
Jako narzędzie wieloplatformowe do synchronizacji struktury katalogów, sugerowałbym synchronizację syncthing.net. Jednak w 2011 roku ....
powinno być 9