Sử dụng rsync từ msysgit cho các tệp nhị phân


22

Tôi có ba hộp cửa sổ được kết nối với hộp linux trên mạng của mình theo nhiều cách khác nhau (một cục bộ với mạng, một là máy tính xách tay và có thể hoặc không cục bộ, và cái còn lại là máy tính để bàn làm việc của tôi). Tôi hiện đang sử dụng git để đồng bộ hóa hầu hết nội dung của mình giữa các hộp (sử dụng hộp Linux làm máy chủ) và nó hoạt động như một nhà vô địch.

Tuy nhiên, bây giờ tôi cũng muốn thêm bộ sưu tập MP3 của mình (12 hợp đồng biểu diễn) để được đồng bộ hóa hiệu quả giữa các hộp. Ban đầu tôi nghĩ rằng tôi có thể sử dụng git cho việc này, nhưng có vẻ như rsync sẽ là lựa chọn tốt hơn vì tôi không thực sự cần tất cả những thứ lịch sử. Vì tất cả các tập lệnh quản lý hiện có của tôi chạy dưới git bash (thay vì cygwin), tôi muốn có thể sử dụng nó từ git bash (MINGW32 là những gì nó nói trong thanh tiêu đề của cửa sổ). Tôi chỉ có thể tải xuống trong Cygwin và sao chép nó hoặc có cách nào tốt hơn để tiếp cận nó không? Hộp Linux đang chạy phiên bản Ubuntu Server phiên bản mới nhất - tôi có cần phải làm gì với nó để cho phép rsync hoạt động chính xác không?

Tôi nhận ra có lẽ tôi đang làm điều này theo một cách khó hơn một chút so với cần thiết, nhưng tôi cũng sử dụng nó như một bài tập để cải thiện các kỹ năng dòng lệnh của mình. Bất kỳ đề xuất?


Tôi có thể sử dụng rsync từ vỏ cygwin của mình, nhưng không phải từ msysgit. Tôi đã thử sao chép rsync.exe từ thư mục bin của cygwin sang thư mục bin của msysgit, nhưng vẫn không tìm thấy. Có một số bước khác tôi cần phải làm để cài đặt nó ở đó? Thật kỳ lạ khi tôi gặp một lỗi mà nó không thể tìm thấy tệp, thay vì đưa ra một lỗi mà một trong những phụ thuộc của tệp bị thiếu.

Câu trả lời:


25

Kể từ bây giờ (9/7/2017), cực kỳ dễ dàng để thêm hỗ trợ rsync theo cách thủ công vào môi trường Git cho Windows mà không cần phải chạy Git cho Windows SDK.

Tôi tình cờ thấy bài đăng này và không nghĩ rằng nó thực sự có thể dễ dàng như vậy với tất cả các lựa chọn thay thế, nhưng nó thực sự là. Tất cả những gì bạn cần làm là lấy gói rsync từ kho lưu trữ Gói MSYS2 và giải nén rsync.exetệp vào C:\Program Files\Git\usr\bin. Một và thực hiện. Nó hoạt động.

Nếu bạn cần trợ giúp giải nén rsync.exetừ gói rsync (có tar.xzđịnh dạng), bạn có thể sử dụng tiện ích nén như 7zip hoặc thực hiện trực tiếp trong môi trường bash Git cho Windows như sau:

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

Điều này cung cấp cho bạn rsync.exetệp trong vị trí đã tải xuống (điều chỉnh tên gói cho phù hợp). Trong các vấn đề về quyền của Windows, tôi sẽ không thử đưa ra các lệnh cụ thể về việc đưa exe vào C:\Program Files\Git\usr\binthư mục. Bạn có thể sao chép nó thông qua GUI explorer hoặc thông qua tiện ích dòng lệnh nâng cao (và vâng, nó sẽ yêu cầu quyền cấp quản trị viên để sao chép thứ gì đó vào thư mục Tệp chương trình).

Nếu bạn cũng muốn sử dụng xác thực Pagete với rsync trên ssh, tệp nhị phân ssh-pagete đã được cài đặt trong Git cho Windows và tất cả những gì bạn cần làm là thêm một chút vào tệp ~/.bashrchoặc ~/.bash_profiletệp của bạn (xem phần sử dụng ssh-pageteGit cho Windows wiki ). Tôi đã sửa đổi nó một cách cụ thể để sử dụng với môi trường Git cho Windows và cải thiện nó với một số phát hiện cho một tệp ổ cắm bị thiếu:

# 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

Tôi không thể nói về cách các tiện ích khác có thể hoặc có thể không hoạt động bằng cách cài đặt thủ công theo cách này, nhưng rsync dường như hoạt động tốt. Hy vọng rằng repo sẽ ở lại và tiếp tục được cập nhật - Tôi nghĩ vậy vì nó được lưu trữ tại trang web chính thức của MSYS2.


1
cảm ơn ngài, tải xuống và nó hoạt động .. ai có thể biết ...
pscheit

Vấn đề. Không rsync.exechỉ có các phiên bản khác nhau của rsync trong .pkg.tar.xz các định dạng. Điều đó có thể ổn, ngoại trừ việc tôi không thể cài đặt apt-get install xz-utils( sudo apt-get install xz-utils) vì tôi không thể cài đặt sudoOR apt-getcho Git Bash cho Windows :-( và do đó không thể cài đặt xz-utils. Có cách nào khác không? Tôi có liên kết mới hơn rsync.exekhông bằng cách nào đó tôi có thể khiến Git Bash giải nén tệp .xz này?
SherylHohman

Trên thực tế, nó có vẻ là một vấn đề quyền hơn. Khi tôi tar -xf rsync-3.1.3-1-x86_64.pkg.tar.xz, tôi nhận được một loạt các thông điệp nêu rõ: Cannot open: Permission denied, Cannot mkdir: Permission denied, Cannot mkdir: No such file or directoryCannot open: No such file or directorycho nhiều tập tin / thư mục. Có lẽ Git Bash đã biết cách giải nén xzcác tập tin? Nhưng không thể b / e quyền? Tôi không thể sử dụng hoặc cài đặt sudo. đến Git Bash.
SherylHohman

Giả sử bạn đã tải xuống tệp tar.xz vào thư mục Tải xuống, bạn có thể giải nén nó khỏi Git Bash bằng cách sử dụng:cd / && tar Jxvf /c/Users/$USR/Downloads/rsync-3.1.3-1-x86_64.pkg.tar.xz
hansfn

@SherylHohman bạn phải tự giải nén exe từ tệp gói. Không có "cài đặt" cần thiết nào ngoài việc thả exe vào C:\Program Files\Git\usr\binthư mục.
nextgentech

7

Tôi biết câu hỏi không phải là "Sử dụng rsync cho MSYS", nhưng tôi nghĩ việc đề cập đến vấn đề này có liên quan:

"MinGW Shell" (trước đây gọi là "MSYS (Hệ thống cơ bản)") thực sự có rsync. Tôi đang sử dụng hệ vỏ / hệ thống đó thường xuyên nhất có thể vì nó nhỏ hơn Cygwin rất nhiều. (Tôi có lẽ là người duy nhất quan tâm đến kích thước tệp ngày nay.)

"Git cho Windows" / "Git Bash" có thể dễ dàng thêm rsync vì nó dựa trên MinGW / MSYS và nó đã được đề cập trong danh sách gửi thư trước đó.

Tái bút Nếu Shell MinGW của bạn không có rsync, chỉ cần chạy "mingw-get install msys-rsync" để thêm nó.

Cập nhật ngày 25 tháng 3 năm 2016:

Git cho Windows hiện sử dụng MSYS2. Và MSYS2 sử dụng "pacman", không phải "mingw-get", để cài đặt các gói. Thật không may, "Git cho Windows" không bao gồm pacman ... Có hai tùy chọn:

  1. Cài đặt Git cho Windows SDK (bao gồm pacman).
  2. Cài đặt Git bên trong MSYS2.

Tùy chọn cuối cùng là sở thích của tôi, nhưng nó chưa được sắp xếp hợp lý nên tùy chọn đầu tiên có lẽ dễ dàng hơn. Hy vọng, nó sẽ được sửa chữa .

Tái bút Tôi chưa chơi nhiều với MSYS2 / pacman, nhưng có vẻ rất hứa hẹn.

Cập nhật ngày 7 tháng 8 năm 2019:

Nếu bạn đang sử dụng Git cho Windows (Git Bash), tốt hơn hết là bạn chỉ cần lấy gói rsync từ kho lưu trữ Gói MSYS2, như được mô tả trong câu trả lời ở trên .


thật đáng buồn, trong Git Bash:$ mingw-get bash: mingw-get: command not found
Hendy I Girls

Vâng, nó hơi buồn. Nhìn vào câu trả lời cập nhật của tôi ở trên - vẫn buồn, nhưng tình hình đã được cải thiện.
hansfn

Tôi đã đi đến tùy chọn thứ hai và tôi đã kết thúc với một thư mục 2,17GB, nhưng mọi thứ hoạt động như một cơ duyên. Tôi đã cài đặt rsync bằng cách sử dụng pacman -S rsync. Trước đây tôi đã sử dụng CygWin nhưng tôi nghĩ MSYS2 thật tuyệt vời, tôi không phải chạy gui để cài đặt các gói bổ sung.
Edenshaw

Báo cáo lỗi được liệt kê trong câu trả lời này đã bị đóng là "không thể trộn được" - tuy nhiên, tôi đã tạo một yêu cầu kéo để có rsync đi kèm với Git cho Windows .
Scott Stevens

Bất kỳ liên kết về cách làm tùy chọn 1 hoặc tùy chọn 2? Tôi nghĩ rằng tôi có Git cho Windows SDK. Dunno. Nhưng giả sử tôi làm, hoặc có thể lấy nó .. thì sao? Nếu không, tôi không biết ý nghĩa của việc cài đặt Git bên trong MSYS2 là gì. Điều đó có nghĩa là tôi cần xóa cài đặt Git hiện tại của mình. Tôi sẽ mất bất cứ thứ gì, như cài đặt hoặc chức năng nếu tôi làm như vậy. Liên kết này sẽ bị phá vỡ?
SherylHohman

2

Tôi giả sử git bashbạn thực sự có ý nghĩa msysgit, còn gọi là "git cho windows." Tùy chọn Menu bắt đầu là git bash, giải thích tên bạn đã sử dụng ..

Đầu tiên, bạn đúng khi loại bỏ git như một tùy chọn ở đây. Một trong những điều mà git không làm tốt là xử lý các tệp nhị phân - và cuối cùng bạn sẽ có một kho lưu trữ khổng lồ. Ngoài ra, vì bạn sẽ không xử lý các thay đổi, sử dụng chi phí của git tấn công tôi là quá mức cần thiết.

Thứ hai, có vẻ như câu hỏi bạn thực sự hỏi là "Tôi có thể sử dụng rsync từ msysgit / Windows không?" Câu trả lời ngắn gọn là, không ra khỏi hộp. msysgitthực sự chỉ là dòng lệnh Windows về hình thức và chức năng. Điều đó đang được nói, bạn có hai tùy chọn: tải xuống công cụ của bên thứ ba để bật rsync trên máy Windows của bạn ( Stack Overflow: Rupync cho Windows ) hoặc chỉ sử dụng cygwin. Thực sự, họ có cùng một kết quả - do đó, tùy thuộc vào bạn để quyết định cái nào hoạt động tốt hơn.


Tôi có thể sử dụng rsync từ vỏ cygwin của mình, nhưng không phải từ msysgit. Tôi đã thử sao chép rsync.exe từ thư mục bin của cygwin sang thư mục bin của msysgit, nhưng vẫn không tìm thấy. Có một số bước khác tôi cần phải làm để cài đặt nó ở đó? Thật kỳ lạ khi tôi gặp một lỗi mà nó không thể tìm thấy tệp, thay vì đưa ra một lỗi mà một trong những phụ thuộc của tệp bị thiếu. Cảm ơn, Will
Will Gant

Điều này chỉ đơn giản là không thể. cygwin thiết lập một môi trường dựa trên GNU, bao gồm các thư viện, cấu hình giống như Linux, v.v. msysgitlà dòng lệnh Windows, hỗ trợ các tệp thực thi của Windows. Điều có thể xảy ra là, nó thậm chí không thể phát hiện tệp là có thể thực thi được. Nói một cách đơn giản, cygwin và msysgit thậm chí không tương thích từ xa.
Andrew M.

Nó có thể nhưng hacky. Sao chép cygiconv-2.dll, cygwin1.dllrsync.exetừ Cygwin để con đường msysgit của bạn. Không có gì khác (đặc biệt không phải là ssh.exe). Vấn đề thường là sự không tương thích giữa Git SSH và Cygwin / rsync SSH. Cố gắng giữ nguyên phiên bản. Bạn vẫn sẽ gặp vấn đề với /cygdrive/nhưng tôi không có giải pháp nào ngoại trừ a cd.
Wernight

0

Đối với những gì nó có giá trị, tôi đã gặp vấn đề tương tự nhận được cwRsync để làm việc trong msysgit khi rơi vào con đường bin, nhưng sau khi thử rất nhiều thứ khác nhau cuối cùng phát hiện ra rằng chỉ đơn giản là cập nhật lên phiên bản mới nhất (2.10.2) của Git cho Windows cố định vấn đề.


cwRsync là $ 19 / năm itefix.net/cwrsync
SherylHohman

0

rsync là một tuyệt vời cho đồng bộ đơn hướng. Bạn có thể chạy rsync dưới cygwin hoặc cho Windows cũng có Deltacopy

Nếu bạn muốn có đồng bộ hóa hai chiều, hãy xem unison

Đối với một công cụ nền tảng đồng bộ hóa thư mục chéo, có syncthing mà chạy trên hầu hết các nền tảng.


unison là tuyệt vời, nhưng bạn phải cài đặt nó trên máy chủ - giống như 90% máy chủ đã sẵn sàng rsync. Và OP đã yêu cầu rsync
pscheit

OP đã hỏi về rsync, nhưng điều mà OP đang cố gắng đạt được là "được đồng bộ hóa hiệu quả giữa các hộp" và unison có sẵn trong hầu hết các repos ...
nênbeq931

Có vẻ như DeltaCopy không có sẵn cho Windows 10. Có thể không còn được duy trì?
SherylHohman

Thật khó để biết Unison có hoạt động trên Windows 10. Đã lâu không có bản cập nhật. Không có đề cập đến những phiên bản HĐH Windows mà phần mềm này hỗ trợ. Có một số vấn đề lại: Windows 10 github.com/bcpierce00/unison/
Kẻ

Là một công cụ đa nền tảng để giữ cấu trúc thư mục được đồng bộ hóa trong những ngày này, tôi đề nghị syncthing syncthing.net Tuy nhiên vào năm 2011 ....
Shouldbeq931
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.