Menggunakan rsync dari msysgit untuk file biner

22

Saya memiliki tiga kotak jendela yang terhubung ke kotak linux di jaringan saya dalam berbagai cara (satu lokal ke jaringan, satu adalah laptop dan mungkin atau mungkin tidak lokal, dan yang lainnya adalah desktop kerja saya). Saat ini saya menggunakan git untuk menyinkronkan sebagian besar barang saya di antara kotak-kotak (menggunakan kotak Linux sebagai server) dan itu bekerja seperti juara.

Sekarang, bagaimanapun, saya juga ingin menambahkan koleksi MP3 saya (12 gigs) agar disinkronkan secara efisien di antara kotak-kotak. Awalnya saya pikir saya bisa menggunakan git untuk ini, tetapi sepertinya rsync akan menjadi pilihan yang lebih baik karena saya tidak benar-benar membutuhkan semua barang bersejarah. Karena semua skrip manajemen saya yang ada berjalan di bawah git bash (bukan cygwin), saya ingin dapat menggunakannya dari git bash (MINGW32 adalah apa yang tertulis di bilah judul jendela). Bisakah saya mengunduhnya di Cygwin dan menyalinnya atau ada cara yang lebih baik untuk mendekatinya? Kotak Linux menjalankan versi terbaru dari edisi Server Ubuntu - apakah saya perlu melakukan apa saja untuk mengaktifkan rsync agar berfungsi dengan benar di dalamnya?

Saya menyadari bahwa saya mungkin melakukan ini dengan cara yang sedikit lebih sulit daripada yang dibutuhkan, tetapi saya juga menggunakan ini sebagai latihan dalam meningkatkan keterampilan baris perintah saya. Ada saran?


Saya dapat menggunakan rsync dari shell cygwin saya, tetapi tidak dari msysgit. Saya mencoba menyalin rsync.exe dari folder bin cygwin ke folder bin msysgit, tetapi masih belum menemukannya. Apakah ada langkah lain yang perlu saya lakukan untuk menginstalnya di sana? Sungguh aneh bahwa saya mendapatkan kesalahan karena tidak dapat menemukan file, alih-alih memberi saya kesalahan bahwa salah satu dependensi file hilang.

Will Gant
sumber

Jawaban:

25

Sampai sekarang (9/7/2017) sangat mudah untuk menambahkan secara manual dukungan rsync ke lingkungan Git untuk Windows tanpa harus menggunakan Git untuk Windows SDK.

Saya sengaja menemukan posting ini dan tidak berpikir itu bisa semudah itu diberikan semua alternatif, tetapi sebenarnya. Yang perlu Anda lakukan adalah mengambil paket rsync dari repositori Paket MSYS2 dan mengekstrak rsync.exefile ke dalamnyaC:\Program Files\Git\usr\bin . Satu dan selesai. Berhasil.

Jika Anda memerlukan bantuan mengekstrak rsync.exedari paket rsync (yang dalam tar.xzformat), Anda dapat menggunakan utilitas kompresi seperti 7zip atau melakukannya langsung di dalam lingkungan bash Git untuk Windows seperti:

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

Ini memberi Anda rsync.exefile di lokasi yang diunduh (sesuaikan nama paket sesuai). Mengingat masalah izin Windows saya tidak akan mencoba memberikan perintah khusus untuk memasukkan exe ke C:\Program Files\Git\usr\binfolder. Anda dapat menyalinnya melalui GUI explorer atau melalui utilitas baris perintah yang ditinggikan (dan ya, itu akan memerlukan izin tingkat admin untuk menyalin sesuatu ke folder Program Files).

Jika Anda ingin juga menggunakan Pageant otentikasi dengan rsync lewat ssh, biner ssh-kontes yang sudah dipasang di Git untuk Windows dan semua yang perlu Anda lakukan adalah menambahkan sedikit kecil untuk Anda ~/.bashrcatau ~/.bash_profileberkas (lihat bagian penggunaan ssh-kontes dan Git untuk Windows wiki ). Saya telah memodifikasinya secara khusus untuk digunakan dengan lingkungan Git untuk Windows dan meningkatkannya dengan beberapa deteksi untuk file socket yang hilang:

# 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

Saya tidak dapat berbicara bagaimana utilitas lain mungkin atau mungkin tidak bekerja dengan menginstalnya secara manual dengan cara ini, tetapi rsync tampaknya berfungsi dengan baik. Mudah-mudahan repo itu akan tetap dan terus diperbarui - saya pikir begitu karena sudah di-host di situs MSYS2 resmi.

nextgentech
sumber
1
terima kasih tuan, unduh dan berfungsi .. siapa yang akan tahu ...
pscheit
Masalah. Tidak ada rsync.exehanya berbagai versi rsync dalam .pkg.tar.xz format. Itu mungkin OK, kecuali bahwa saya tidak dapat menginstal apt-get install xz-utils( sudo apt-get install xz-utils) karena saya tidak dapat menginstal sudoATAU apt-getke Git Bash untuk Windows :-( dan dengan demikian tidak dapat menginstal xz-utils. Apakah ada cara lain untuk mengatasi ini? Apakah ada tautan yang lebih baru di mana saya bisa mendapatkan rsync.exe, atau beberapa cara saya bisa mendapatkan Git Bash untuk mengompres file .xz ini?
SherylHohman
Sebenarnya, tampaknya lebih merupakan masalah izin. Ketika saya tar -xf rsync-3.1.3-1-x86_64.pkg.tar.xz, saya mendapatkan banyak pesan yang menyatakan: Cannot open: Permission denied, Cannot mkdir: Permission denied, Cannot mkdir: No such file or directorydan Cannot open: No such file or directoryuntuk berbagai file / direktori. Mungkin Git Bash sudah tahu cara mengompres xzfile? Tapi tidak bisakah izin itu? Saya tidak dapat menggunakan atau menginstal sudo. untuk Git Bash.
SherylHohman
Dengan asumsi Anda mengunduh file tar.xz ke folder Downloads Anda, Anda dapat membukanya dari Git Bash menggunakan:cd / && tar Jxvf /c/Users/$USR/Downloads/rsync-3.1.3-1-x86_64.pkg.tar.xz
hansfn
@ SherylHohman Anda harus secara manual mengekstrak exe dari file paket. Tidak ada "instalasi" yang diperlukan selain hanya menjatuhkan exe ke C:\Program Files\Git\usr\binfolder.
nextgentech
7

Saya tahu pertanyaannya bukan "Menggunakan rsync untuk MSYS", tapi saya pikir menyebutkan ini relevan:

"MinGW Shell" (sebelumnya dikenal sebagai "MSYS (Basic System)") memang memiliki rsync. Saya menggunakan shell / sistem itu sesering mungkin karena jauh lebih kecil daripada Cygwin. (Saya mungkin satu-satunya yang peduli tentang ukuran file hari ini.)

"Git untuk Windows" / "Git Bash" dapat dengan mudah menambahkan rsync karena didasarkan pada MinGW / MSYS dan telah disebutkan di milis sebelumnya.

PS! Jika MinGW Shell Anda tidak memiliki rsync, jalankan saja "mingw-get install msys-rsync" untuk menambahkannya.

Diperbarui pada 25 Maret 2016:

Git untuk Windows sekarang menggunakan MSYS2. Dan MSYS2 menggunakan "pacman", bukan "mingw-get", untuk menginstal paket. Sayangnya, "Git untuk Windows" tidak termasuk pacman ... Ada dua opsi:

  1. Instal Git untuk Windows SDK (yang termasuk pacman).
  2. Instal Git di dalam MSYS2.

Opsi terakhir adalah favorit saya, tetapi belum disederhanakan sehingga opsi pertama mungkin lebih mudah. Semoga akan diperbaiki .

PS! Saya belum banyak bermain dengan MSYS2 / pacman, tapi sepertinya sangat menjanjikan.

Diperbarui 7 Agustus 2019:

Jika Anda menggunakan Git untuk Windows (Git Bash), lebih baik mengambil paket rsync dari repositori Paket MSYS2, seperti yang dijelaskan dalam jawaban di atas .

hansfn
sumber
sayangnya, di Git Bash:$ mingw-get bash: mingw-get: command not found
Hendy Irawan
Ya, ini agak menyedihkan. Lihatlah jawaban saya yang diperbarui di atas - masih sedih, tetapi situasinya telah membaik.
hansfn
Saya memilih opsi kedua dan berakhir dengan folder 2,17GB, tetapi semuanya berjalan dengan baik. Saya menginstal rsync dengan menggunakan pacman -S rsync. Di masa lalu saya menggunakan CygWin tapi saya pikir MSYS2 mengagumkan, saya tidak perlu menjalankan gui untuk menginstal paket tambahan.
Edenshaw
Laporan bug yang tercantum dalam jawaban ini sejak itu telah ditutup sebagai "tidak dapat diperbaiki" - namun, saya telah membuat permintaan tarik agar rsync disertakan dengan Git untuk Windows .
Scott Stevens
Adakah tautan tentang cara melakukan opsi 1 atau opsi 2? Saya rasa saya punya Git untuk Windows SDK. Tidak tahu Tapi dengan asumsi saya lakukan, atau bisa mendapatkannya .. lalu bagaimana? Jika tidak, saya tidak tahu apa artinya menginstal Git di dalam MSYS2. Apakah itu berarti saya harus menghapus instalasi Git saya saat ini. Apakah saya akan kehilangan apa pun, seperti pengaturan atau fungsionalitas jika saya melakukannya. Akankah nay link terputus?
SherylHohman
2

Saya menganggap git bashAnda benar-benar jahat msysgit, alias "git for windows." Opsi Start Menu adalah git bash, yang menjelaskan nama yang Anda gunakan ..

Pertama, Anda benar dalam menolak git sebagai opsi di sini. Salah satu hal yang tidak dilakukan git dengan baik adalah menangani file biner - dan Anda akan berakhir dengan repositori besar yang membengkak. Selain itu, karena Anda tidak akan menangani perubahan, menggunakan overhead dari git menurut saya berlebihan.

Kedua, sepertinya pertanyaan yang sebenarnya Anda tanyakan adalah, "Bisakah saya menggunakan rsync dari msysgit / Windows?" Jawaban singkatnya adalah, tidak keluar dari kotak. msysgitbenar-benar hanya baris perintah Windows dalam hal bentuk dan fungsi. Karena itu, Anda memiliki dua opsi: unduh alat pihak ketiga untuk mengaktifkan rsync pada mesin Windows Anda ( Stack Overflow: Rsync untuk Windows ), atau cukup gunakan cygwin. Sungguh, mereka memiliki hasil yang sama - jadi terserah Anda untuk memutuskan mana yang bekerja lebih baik.

Andrew M.
sumber
Saya dapat menggunakan rsync dari shell cygwin saya, tetapi tidak dari msysgit. Saya mencoba menyalin rsync.exe dari folder bin cygwin ke folder bin msysgit, tetapi masih belum menemukannya. Apakah ada langkah lain yang perlu saya lakukan untuk menginstalnya di sana? Sungguh aneh bahwa saya mendapatkan kesalahan karena tidak dapat menemukan file, alih-alih memberi saya kesalahan bahwa salah satu dependensi file hilang. Terima kasih, Will
Will Gant
Ini tidak mungkin. cygwin mengatur lingkungan berbasis GNU, termasuk perpustakaan seperti Linux, konfigurasi, dll. msysgitadalah baris perintah Windows, yang mendukung Windows executable. Apa yang mungkin terjadi adalah, bahkan tidak dapat mendeteksi file sebagai executable. Sederhananya, cygwin dan msysgit bahkan tidak kompatibel dari jarak jauh.
Andrew M.
Itu mungkin tapi hacky. Salin cygiconv-2.dll, cygwin1.dlldan rsync.exedari Cygwin ke jalur msysgit Anda. Tidak ada yang lain (terutama bukan ssh.exe). Masalahnya biasanya ketidakcocokan antara Git SSH dan Cygwin / rsync SSH. Cobalah untuk mempertahankan versi yang sama. Anda masih akan memiliki masalah dengan /cygdrive/tetapi di sana saya tidak punya solusi kecuali a cd.
Wernight
0

Untuk apa nilainya, saya mengalami masalah serupa mendapatkan cwRsync untuk bekerja di msysgit ketika jatuh ke jalur bin, tetapi setelah mencoba banyak hal yang berbeda akhirnya menemukan bahwa hanya memperbarui ke versi terbaru (2.10.2) dari Git untuk Windows memperbaiki isu.

Nick F
sumber
cwRsync adalah $ 19 / tahun itefix.net/cwrsync
SherylHohman
0

rsync bagus untuk sinkronisasi searah. Anda dapat menjalankan rsync di bawah cygwin, atau untuk Windows juga ada Deltacopy

Jika Anda ingin memiliki sinkronisasi dua arah, maka lihatlah bersamaan

Untuk alat sinkronisasi direktori lintas platform, ada sinkronisasi yang berjalan di sebagian besar platform.

shouldbeq931
sumber
serempak hebat, tetapi Anda harus menginstalnya di server - seperti 90% server siap rsync. Dan OP meminta rsync
pscheit
OP bertanya tentang rsync, tetapi yang ingin dicapai oleh OP adalah "disinkronkan secara efisien di antara kotak-kotak", dan serentak tersedia di sebagian besar repo ...
shouldbeq931
Sepertinya DeltaCopy tidak tersedia untuk Windows 10. Tidak dapat dipertahankan?
SherylHohman
Sulit untuk mengetahui apakah Unison berfungsi pada Windows 10. Belum ada pembaruan untuk waktu yang lama. Tidak disebutkan versi OS Windows apa yang didukung perangkat lunak ini. Ada beberapa masalah kembali: Windows 10 github.com/bcpierce00/unison/…
SherylHohman
Sebagai alat lintas platform untuk menjaga struktur direktori tetap sinkron hari ini, saya sarankan syncthing syncthing.net Namun pada tahun 2011 ....
shouldbeq931