การใช้ rsync จาก msysgit สำหรับไฟล์ไบนารี


22

ฉันมีกล่อง windows สามกล่องที่เชื่อมต่อกับกล่อง linux บนเครือข่ายของฉันในรูปแบบต่าง ๆ (ภายในเครื่องหนึ่งไปยังเครือข่ายหนึ่งคือแล็ปท็อปและอาจใช่หรือไม่ใช่ท้องถิ่นและอีกอันคือเดสก์ทอปทำงานของฉัน) ขณะนี้ฉันใช้ git เพื่อทำข้อมูลส่วนใหญ่ให้ตรงกันระหว่างกล่อง (ใช้กล่อง Linux เป็นเซิร์ฟเวอร์) และใช้งานได้เหมือนแชมป์

อย่างไรก็ตามตอนนี้ฉันยังต้องการเพิ่มคอลเล็กชัน MP3 ของฉัน (12 กิ๊ก) เพื่อซิงโครไนซ์ระหว่างกล่องอย่างมีประสิทธิภาพ ตอนแรกฉันคิดว่าฉันสามารถใช้คอมไพล์ได้ แต่ดูเหมือนว่า rsync จะเป็นตัวเลือกที่ดีกว่าเพราะฉันไม่ต้องการสิ่งประวัติศาสตร์ทั้งหมด เนื่องจากสคริปต์การจัดการที่มีอยู่ทั้งหมดของฉันทำงานภายใต้ git bash (แทนที่จะเป็น cygwin) ฉันจึงอยากจะใช้มันจาก git bash (MINGW32 เป็นสิ่งที่มันบอกไว้ในแถบชื่อเรื่องของหน้าต่าง) ฉันสามารถดาวน์โหลดมันใน Cygwin และคัดลอกมันไปหรือมีวิธีที่ดีกว่าในการเข้าถึงมันได้หรือไม่? กล่อง Linux ใช้งาน Ubuntu Server version ล่าสุด - ฉันต้องทำอะไรเพื่อเปิดใช้งาน rsync เพื่อให้ทำงานได้อย่างถูกต้องหรือไม่?

ฉันรู้ว่าฉันอาจจะทำสิ่งนี้ด้วยวิธีที่ยากกว่าที่ต้องการเล็กน้อย แต่ฉันก็ใช้สิ่งนี้เป็นแบบฝึกหัดในการพัฒนาทักษะบรรทัดคำสั่งของฉัน ข้อเสนอแนะใด ๆ


ฉันสามารถใช้ rsync จาก cygwin shell ได้ แต่ไม่ใช่จาก msysgit ฉันพยายามคัดลอก rsync.exe จากโฟลเดอร์ bin ของ cygwin ไปยังโฟลเดอร์ bin ของ msysgit แต่ก็ยังหาไม่เจอ มีขั้นตอนอื่นที่ฉันต้องทำเพื่อติดตั้งที่นั่นหรือไม่ มันแปลกที่ฉันได้รับข้อผิดพลาดที่ไม่สามารถหาไฟล์ได้แทนที่จะให้ข้อผิดพลาดกับการอ้างอิงของไฟล์ตัวใดตัวหนึ่งหายไป

คำตอบ:


25

ณ ตอนนี้ (9/7/2560) เป็นเรื่องง่ายมากที่จะเพิ่มการสนับสนุน rsync ให้กับสภาพแวดล้อม Git สำหรับ Windows ด้วยตนเองโดยไม่ต้องหันไปใช้ Git สำหรับ Windows SDK

ฉันสะดุดข้ามโพสต์นี้และไม่คิดว่ามันเป็นเรื่องง่ายที่จะให้ทางเลือกทั้งหมด แต่มันเป็นจริง สิ่งที่คุณต้องทำคือคว้าแพ็คเกจ rsync จากที่เก็บ MSYS2 Packageและแตกrsync.exeไฟล์ออกC:\Program Files\Git\usr\binมา หนึ่งและทำ มันได้ผล.

หากคุณต้องการความช่วยเหลือในการแยกrsync.exeแพคเกจ rsync (ซึ่งอยู่ในtar.xzรูปแบบ) คุณสามารถใช้ยูทิลิตี้การบีบอัดเช่น 7zip หรือทำโดยตรงในสภาพแวดล้อมการทุบตี Git for Windows เช่น:

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

สิ่งนี้จะให้rsync.exeไฟล์คุณในตำแหน่งที่ดาวน์โหลด (ปรับชื่อแพ็คเกจตาม) ในแง่ของปัญหาการอนุญาตของ Windows ฉันจะไม่พยายามให้คำสั่งเฉพาะในการรับ exe ลงในC:\Program Files\Git\usr\binโฟลเดอร์ คุณสามารถคัดลอกมันผ่าน explorer GUI หรือผ่านยูทิลิตี้บรรทัดคำสั่งยกระดับ (และใช่มันจะต้องมีสิทธิ์ระดับผู้ดูแลระบบเพื่อคัดลอกบางสิ่งลงในโฟลเดอร์ Program Files)

หากคุณต้องการใช้การรับรองความถูกต้องของ Pageant ด้วย rsync บน ssh ไบนารี ssh-pageant จะถูกติดตั้งแล้วใน Git สำหรับ Windowsและสิ่งที่คุณต้องทำคือเพิ่มบิต~/.bashrcหรือ~/.bash_profileไฟล์ของคุณเล็กน้อย(ดูส่วนการใช้ ssh-pageantและGit สำหรับ Windows wiki ) ฉันได้แก้ไขมันโดยเฉพาะเพื่อใช้กับสภาพแวดล้อม Git สำหรับ Windows และปรับปรุงด้วยการตรวจหาไฟล์ซ็อกเก็ตที่ขาดหายไป:

# 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

ฉันไม่สามารถพูดได้ว่ายูทิลิตี้อื่น ๆ อาจหรือไม่ทำงานโดยการติดตั้งด้วยตนเองด้วยวิธีนี้ แต่ rsync ดูเหมือนว่าจะทำงานได้ดี หวังว่า repo จะยังคงอยู่และได้รับการอัปเดตต่อไป - ฉันคิดอย่างนั้นเพราะโฮสต์ไว้ที่เว็บไซต์อย่างเป็นทางการของ MSYS2


1
ขอบคุณครับคุณดาวน์โหลดและใช้งานได้ดี .. ใครจะรู้จัก ...
— pscheit

ปัญหา. ไม่มีrsync.exersync ใน.pkg.tar.xz รูปแบบที่หลากหลายเท่านั้น อาจเป็นไปได้ยกเว้นว่าฉันไม่สามารถติดตั้งapt-get install xz-utils( sudo apt-get install xz-utils) เพราะฉันไม่สามารถติดตั้งsudoหรือapt-getไปที่ Git Bash สำหรับ Windows :-( ดังนั้นจึงไม่สามารถติดตั้งxz-utilsได้มีวิธีแก้ไขไหม? มีลิงก์ใหม่ที่ฉันสามารถหาได้rsync.exeหรือ วิธีการบางอย่างที่ฉันจะได้รับ Git ทุบตีเพื่อยกเลิกการบีบอัดไฟล์ .xz นี้หรือไม่?
— SherylHohman

ที่จริงดูเหมือนว่าจะมีปัญหาสิทธิ์เพิ่มขึ้น เมื่อฉันtar -xf rsync-3.1.3-1-x86_64.pkg.tar.xzฉันได้รับพวงของข้อความเซน: Cannot open: Permission denied, Cannot mkdir: Permission denied, Cannot mkdir: No such file or directoryและCannot open: No such file or directoryต่างๆไฟล์ไดเรกทอรี / บางที Git Bash รู้วิธีคลายการบีบอัดxzไฟล์อยู่แล้ว? แต่ไม่สามารถให้สิทธิ์ b / e ได้? sudoฉันไม่สามารถใช้หรือติดตั้ง ถึง Git Bash
— SherylHohman

สมมติว่าคุณดาวน์โหลดไฟล์ tar.xz ไปยังโฟลเดอร์ดาวน์โหลดคุณสามารถแตกไฟล์ออกจาก Git Bash โดยใช้:cd / && tar Jxvf /c/Users/$USR/Downloads/rsync-3.1.3-1-x86_64.pkg.tar.xz
— hansfn

@SherylHohman คุณต้องแตกไฟล์ exe ด้วยตนเองจากไฟล์แพ็คเกจ ไม่จำเป็นต้องมี "การติดตั้ง" นอกจากจะวาง exe ลงในC:\Program Files\Git\usr\binโฟลเดอร์
— nextgentech

7

ฉันรู้ว่าคำถามไม่ใช่ "การใช้ rsync สำหรับ MSYS" แต่ฉันคิดว่าการพูดถึงสิ่งนี้เกี่ยวข้อง:

"MinGW Shell" (เดิมชื่อ "MSYS (ระบบพื้นฐาน)") มี rsync ฉันใช้เชลล์ / ระบบนั้นบ่อยที่สุดเท่าที่จะเป็นไปได้เพราะมันเล็กกว่า Cygwin มาก (ฉันอาจเป็นคนเดียวที่ใส่ใจเกี่ยวกับขนาดไฟล์วันนี้)

"Git for Windows" / "Git Bash" สามารถเพิ่ม rsync ได้อย่างง่ายดายเพราะใช้ MinGW / MSYS และถูกกล่าวถึงในรายชื่อผู้รับจดหมายก่อนหน้านี้

PS! หาก MinGW Shell ของคุณไม่มี rsync ให้เรียกใช้ "mingw-get install msys-rsync" เพื่อเพิ่ม

อัปเดต 25 มีนาคม 2559:

Git สำหรับ Windows ตอนนี้ใช้ MSYS2 และ MSYS2 ใช้ "pacman" ไม่ใช่ "mingw-get" เพื่อติดตั้งแพ็คเกจ น่าเสียดายที่ "Git สำหรับ Windows" ไม่มี pacman ... มีสองตัวเลือก:

  1. ติดตั้ง Git สำหรับ Windows SDK (ซึ่งรวมถึง pacman)
  2. ติดตั้ง Git ภายใน MSYS2

ตัวเลือกสุดท้ายเป็นรายการโปรดของฉัน แต่ก็ยังไม่คล่องตัวดังนั้นตัวเลือกแรกน่าจะง่ายกว่า หวังว่ามันจะได้รับการแก้ไข

PS! ฉันไม่ได้เล่นกับ MSYS2 / pacman มากนัก แต่ดูเหมือนว่าจะมีแนวโน้มมาก

อัปเดตเมื่อวันที่ 7 สิงหาคม 2019:

หากคุณกำลังใช้ Git สำหรับ Windows (Git Bash) มันเป็นเรื่องที่ดีมากที่จะเพียงแค่คว้าแพคเกจ rsync จากพื้นที่เก็บข้อมูล MSYS2 แพคเกจตามที่อธิบายไว้ในคำตอบข้างต้น


น่าเศร้าใน Git Bash:$ mingw-get bash: mingw-get: command not found
— Hendy Irawan

ใช่มันค่อนข้างเศร้า ดูคำตอบที่อัปเดตของฉันด้านบน - ยังเศร้า แต่สถานการณ์ดีขึ้น
— hansfn

ฉันเลือกตัวเลือกที่สองและลงเอยด้วยโฟลเดอร์ 2.17GB แต่ทุกอย่างทำงานได้อย่างมีเสน่ห์ ผมติดตั้ง rsync pacman -S rsyncโดยใช้ ในอดีตที่ผ่านมาฉันใช้ CygWin แต่ฉันคิดว่า MSYS2 ยอดเยี่ยมฉันไม่ต้องเรียกใช้ gui เพื่อติดตั้งแพ็คเกจเพิ่มเติม
— Edenshaw

รายงานข้อผิดพลาดที่ระบุไว้ในคำตอบนี้ได้ถูกปิดเป็น "unfixable" - แต่ผมได้สร้างคำขอดึงไปได้รวม rsync กับ Git สำหรับ Windows
— Scott Stevens

ลิงก์ใด ๆ เกี่ยวกับวิธีการเลือก 1 หรือ 2 ตัวเลือก ฉันคิดว่าฉันมี Git สำหรับ Windows SDK dunno แต่สมมติว่าฉันทำหรือได้มันมา .. แล้วงั้นเหรอ? ถ้าไม่ฉันไม่ทราบเลยว่าการติดตั้ง Git ใน MSYS2 นั้นหมายถึงอะไร นั่นหมายความว่าฉันต้องลบการติดตั้ง Git ปัจจุบันของฉัน ฉันจะทำทุกสิ่งเช่นการตั้งค่าหรือฟังก์ชั่นถ้าฉันทำ ลิงก์จะไม่หยุดหรือไม่
— SherylHohman

2

ฉันถือว่าgit bashคุณหมายถึงว่าจริงๆแล้วmsysgitคือ "git for windows" ตัวเลือกเมนูเริ่มคือgit bashซึ่งจะอธิบายชื่อที่คุณใช้ ..

ขั้นแรกคุณถูกต้องในการยกเลิก git เป็นตัวเลือกที่นี่ สิ่งหนึ่งที่คอมไพล์ทำได้ไม่ดีคือการจัดการไฟล์ไบนารี - และคุณจะได้พื้นที่เก็บข้อมูลขนาดใหญ่ป่อง นอกจากนี้เนื่องจากคุณจะไม่จัดการกับการเปลี่ยนแปลงการใช้โอเวอร์เฮดของ git ทำให้ฉันเป็น overkill

ประการที่สองดูเหมือนคำถามที่คุณถามจริง ๆ ว่า "ฉันสามารถใช้ rsync จาก msysgit / Windows ได้หรือไม่" คำตอบสั้น ๆ คือไม่ออกนอกกรอบ msysgitเป็นเพียงบรรทัดคำสั่งของ Windows ในรูปแบบและฟังก์ชั่น ดังที่กล่าวไว้คุณมีสองตัวเลือก: ดาวน์โหลดเครื่องมือของบุคคลที่สามเพื่อเปิดใช้งาน rsync บนเครื่อง Windows ของคุณ ( Stack Overflow: Rsync สำหรับ Windows ) หรือเพียงแค่ใช้ cygwin จริง ๆ แล้วพวกเขามีผลลัพธ์เหมือนกันดังนั้นจึงขึ้นอยู่กับคุณที่จะตัดสินใจว่าอันไหนดีกว่า


ฉันสามารถใช้ rsync จาก cygwin shell ได้ แต่ไม่ใช่จาก msysgit ฉันพยายามคัดลอก rsync.exe จากโฟลเดอร์ bin ของ cygwin ไปยังโฟลเดอร์ bin ของ msysgit แต่ก็ยังหาไม่เจอ มีขั้นตอนอื่นที่ฉันต้องทำเพื่อติดตั้งที่นั่นหรือไม่ มันแปลกที่ฉันได้รับข้อผิดพลาดที่ไม่สามารถหาไฟล์ได้แทนที่จะให้ข้อผิดพลาดกับการอ้างอิงของไฟล์ตัวใดตัวหนึ่งหายไป ขอบคุณ Will
— Will Gant

สิ่งนี้เป็นไปไม่ได้ cygwin ตั้งค่าสภาพแวดล้อมที่ใช้ GNU รวมถึงไลบรารี่ที่คล้ายกับ Linux, configs และอื่น ๆ msysgitคือบรรทัดคำสั่งของ Windows ซึ่งรองรับการทำงานของ Windows สิ่งที่น่าจะเกิดขึ้นคือมันไม่สามารถตรวจจับไฟล์ว่าเป็นไฟล์ที่เรียกใช้งานได้ เพียงแค่ใส่ cygwin และ msysgit ก็ไม่สามารถใช้งานร่วมกันได้จากระยะไกล
— แอนดรูว์เอ็ม

มันอาจจะเป็น แต่แฮ็ค คัดลอกcygiconv-2.dll, cygwin1.dllและrsync.exeจาก Cygwin ไปยังเส้นทาง msysgit ของคุณ ไม่มีอะไรอื่น (โดยเฉพาะอย่างยิ่งไม่ใช่ ssh.exe) ปัญหานี้มักจะเข้ากันไม่ได้ระหว่าง Git SSH และ Cygwin / rsync SSH พยายามเก็บเวอร์ชันเดิมไว้ คุณจะยังคงมีปัญหาเกี่ยวกับแต่มีฉันไม่มีวิธีแก้ยกเว้น/cygdrive/ cd
— Wernight

0

สำหรับสิ่งที่มันคุ้มค่าผมมีปัญหาที่คล้ายกันรับcwrsyncการทำงานใน msysgit ลดลงเมื่อเข้ามาในเส้นทางถัง แต่หลังจากที่พยายามจำนวนมากสิ่งที่แตกต่างกันในที่สุดก็พบว่าเพียงแค่การปรับปรุงให้เป็นรุ่นล่าสุด (2.10.2) ของGit สำหรับ Windowsคงที่ ปัญหา.


cwRsync คือ $ 19 / ปีitefix.net/cwrsync
— SherylHohman

0

rsync เหมาะสำหรับการซิงค์ทิศทางเดียว คุณสามารถเรียกใช้ rsync ภายใต้ cygwin หรือสำหรับ Windows นอกจากนี้ยังมีDeltacopy

หากคุณต้องการซิงค์แบบสองทิศทางให้ดูที่พร้อมเพรียงกัน

สำหรับเครื่องมือการซิงโครไนซ์ไดเรกทอรีข้ามแพลตฟอร์มมีsyncthingซึ่งทำงานบนแพลตฟอร์มส่วนใหญ่


พร้อมเพรียงดี แต่คุณต้องติดตั้งบนเซิร์ฟเวอร์ - เช่น 90% ของเซิร์ฟเวอร์พร้อม rsync และ OP ขอ rsync
— pscheit

OP ถามเกี่ยวกับ rsync, แต่สิ่งที่ OP พยายามบรรลุคือ "การซิงโครไนซ์ระหว่างกล่องได้อย่างมีประสิทธิภาพ", และพร้อมเพรียงมีอยู่ใน repos ส่วนใหญ่ ...
— shouldbeq931

ดูเหมือนว่า DeltaCopy ไม่สามารถใช้งานได้กับ Windows 10 จะไม่ได้รับการดูแลอีกต่อไปหรือไม่
— SherylHohman

เป็นการยากที่จะบอกว่า Unison ทำงานบน Windows 10 ไม่ได้มีการอัปเดตเป็นระยะเวลานาน ไม่มีการกล่าวถึงรุ่นของ Windows OS ที่ซอฟต์แวร์นี้รองรับ มีปัญหาหลายเรื่อง: Windows 10 github.com/bcpierce00/unison/ …
— SherylHohman

ในฐานะเครื่องมือข้ามแพลตฟอร์มที่จะทำให้โครงสร้างไดเรกทอรีตรงกันทุกวันนี้ฉันขอแนะนำ syncthing syncthing.netอย่างไรก็ตามในปี 2011 ....
— shouldbeq931
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.