ปัจจุบันคำตอบนี้ใช้ได้กับการใช้คอมพิวเตอร์ Linux สองเครื่องเท่านั้น (หรืออาจใช้งานบน Mac ได้เช่นกัน - ไม่ได้ทดสอบบน Mac] (ซิงค์จากคอมพิวเตอร์หนึ่งไปอีกเครื่องหนึ่ง) เพราะฉันเขียนสคริปต์การซิงโครไนซ์นี้ใน bash มันเป็นเพียงแค่เสื้อคลุมรอบ ๆgit
ดังนั้นอย่าลังเลที่จะนำไปแปลงเป็นโซลูชัน Python ข้ามแพลตฟอร์มหรืออะไรก็ได้ตามที่คุณต้องการ
สิ่งนี้ไม่ได้ตอบคำถามของ OP โดยตรง แต่ใกล้ฉันรับประกันได้ว่าจะตอบคำถามของคนอื่น ๆ ที่ลงจอดในหน้านี้ (รวมจริง ๆ แล้วฉันมาที่นี่ก่อนที่จะเขียนวิธีแก้ปัญหาของตัวเอง) ดังนั้นฉันจึง กำลังโพสต์ไว้ที่นี่แล้ว
ฉันต้องการ:
- พัฒนารหัสโดยใช้ IDE ที่มีประสิทธิภาพเช่น Eclipse บนคอมพิวเตอร์ Linux ที่มีน้ำหนักเบา
- สร้างรหัสนั้นผ่าน ssh บนคอมพิวเตอร์ Linux อื่นที่มีประสิทธิภาพมากกว่า (จากบรรทัดคำสั่งไม่ใช่จากภายใน Eclipse)
ลองเรียกคอมพิวเตอร์เครื่องแรกที่ฉันเขียนรหัส "PC1" (คอมพิวเตอร์ส่วนตัว 1) และคอมพิวเตอร์เครื่องที่สองที่ฉันสร้างรหัส "PC2" ฉันต้องการเครื่องมือในการซิงโครไนซ์จาก PC1 กับ PC2 ได้อย่างง่ายดาย ฉันพยายามrsync
แต่มันช้ามากสำหรับ repos ขนาดใหญ่และใช้แบนด์วิดธ์และข้อมูลจำนวนมาก
ดังนั้นฉันจะทำอย่างไร ฉันควรใช้เวิร์กโฟลว์ใด หากคุณมีคำถามนี้ด้วยนี่คือขั้นตอนการทำงานที่ฉันตัดสินใจ ฉันเขียนสคริปต์ทุบตีเพื่อทำให้กระบวนการเป็นgit
ไปโดยอัตโนมัติโดยใช้เพื่อผลักดันการเปลี่ยนแปลงจาก PC1 ไปยัง PC2 โดยอัตโนมัติผ่านที่เก็บข้อมูลระยะไกลเช่น Github จนถึงตอนนี้มันใช้งานได้ดีมากและฉันก็พอใจกับมันมาก มันไกลเร็วกว่าrsync
น่าเชื่อถือมากกว่าในความเห็นของฉันเพราะพีซีแต่ละเครื่องรักษา repo git ที่ใช้งานได้และใช้แบนด์วิดท์น้อยกว่าในการซิงค์ทั้งหมดดังนั้นจึงสามารถทำได้ง่ายกว่าโทรศัพท์มือถือฮอตสปอตโดยไม่ต้องใช้ข้อมูลมากมาย
ติดตั้ง:
ติดตั้งสคริปต์บน PC1 (วิธีนี้ถือว่า ~ / bin อยู่ใน $ PATH ของคุณ):
git clone https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
cd eRCaGuy_dotfiles/useful_scripts
mkdir -p ~/bin
ln -s "${PWD}/sync_git_repo_from_pc1_to_pc2.sh" ~/bin/sync_git_repo_from_pc1_to_pc2
cd ..
cp -i .sync_git_repo ~/.sync_git_repo
ตอนนี้แก้ไขไฟล์ "~ / .sync_git_repo" ที่คุณเพิ่งคัดลอกด้านบนและอัปเดตพารามิเตอร์ให้เหมาะกับกรณีของคุณ นี่คือพารามิเตอร์ที่มี:
# The git repo root directory on PC2 where you are syncing your files TO; this dir must *already exist*
# and you must have *already `git clone`d* a copy of your git repo into it!
# - Do NOT use variables such as `$HOME`. Be explicit instead. This is because the variable expansion will
# happen on the local machine when what we need is the variable expansion from the remote machine. Being
# explicit instead just avoids this problem.
PC2_GIT_REPO_TARGET_DIR="/home/gabriel/dev/eRCaGuy_dotfiles" # explicitly type this out; don't use variables
PC2_SSH_USERNAME="my_username" # explicitly type this out; don't use variables
PC2_SSH_HOST="my_hostname" # explicitly type this out; don't use variables
คอมไพล์ repo ของคุณที่คุณต้องการซิงค์ทั้งบน PC1 และ PC2
- ตรวจสอบให้แน่ใจว่าปุ่ม ssh ของคุณได้รับการตั้งค่าทั้งหมดเพื่อให้สามารถผลักและดึงไปยัง repo ระยะไกลจากทั้ง PC1 และ PC2 นี่คือลิงค์ที่มีประโยชน์:
- https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
- https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
- ตรวจสอบให้แน่ใจว่าคีย์ ssh ของคุณได้รับการตั้งค่าทั้งหมดเป็น ssh จาก PC1 ถึง PC2
ตอนนี้cd
ในไดเรกทอรีใด ๆ ภายใน git repo บน PC1 และเรียกใช้:
sync_git_repo_from_pc1_to_pc2
แค่นั้นแหละ! ประมาณ 30 วินาทีหลังจากนั้นทุกอย่างจะถูกซิงค์อย่างน่าอัศจรรย์จาก PC1 ถึง PC2 และมันจะทำการพิมพ์เอาต์พุตตลอดเวลาเพื่อบอกคุณว่ากำลังทำอะไรอยู่และที่ใดที่มันทำบนดิสก์ของคุณและบนคอมพิวเตอร์เครื่องใด ก็ปลอดภัยเช่นกันเพราะมันไม่ได้เขียนทับหรือลบสิ่งที่ไม่มีข้อผูกมัด มันสำรองไว้ก่อนแทน! อ่านเพิ่มเติมด้านล่างสำหรับวิธีการทำงาน
นี่คือกระบวนการที่สคริปต์นี้ใช้ (เช่น: สิ่งที่มันทำจริง ๆ )
- จาก PC1: ตรวจสอบเพื่อดูว่าการเปลี่ยนแปลงที่ไม่ได้รับการยอมรับนั้นอยู่ใน PC1 หรือไม่ ถ้าเป็นเช่นนั้นจะส่งไปยังการกระทำชั่วคราวในสาขาปัจจุบัน จากนั้นแรงจะผลักดันพวกเขาไปยังสาขา SYNC ระยะไกล จากนั้นก็ไม่ผิดพลาดเป็นการกระทำชั่วคราวที่เพิ่งทำในสาขาท้องถิ่นจากนั้นจะทำให้ repit git ในพื้นที่กลับมาเหมือนเดิมโดยการจัดเตรียมไฟล์ใด ๆ ถัดไปเป็น
rsync
สำเนาของสคริปต์ไปยัง PC2 และมีการssh
เรียกให้บอก PC2 ให้เรียกใช้สคริปต์ด้วยตัวเลือกพิเศษเพื่อทำสิ่งต่างๆใน PC2
- นี่คือสิ่งที่ PC2 ไม่: มัน
cd
s เข้าไปใน repo และตรวจสอบเพื่อดูว่าท้องถิ่นเปลี่ยนแปลงปราศจากข้อผูกมัดอยู่ หากเป็นเช่นนั้นจะสร้างสาขาสำรองใหม่แยกออกจากสาขาปัจจุบัน (ชื่อตัวอย่าง: my_branch_SYNC_BAK_20200220-0028hrs-15sec
<- สังเกตว่า YYYYMMDD-HHMMhrs - SSsec) และกระทำการเปลี่ยนแปลงใด ๆ ที่ไม่จำเป็นต่อสาขานั้นด้วยข้อความคอมมิทเช่นDO BACKUP OF ALL การเปลี่ยนแปลงที่ไม่ได้รับการยินยอมบน PC2 (เป้าหมาย PC / เครื่องสร้าง). ตอนนี้มันตรวจสอบสาขา SYNC และดึงมันออกมาจากที่เก็บระยะไกลหากยังไม่ได้อยู่บนเครื่องโลคอล จากนั้นจะดึงข้อมูลการเปลี่ยนแปลงล่าสุดของที่เก็บระยะไกลและทำการฮาร์ดรีเซ็ตเพื่อบังคับให้ที่เก็บข้อมูล SYNC ในพื้นที่ให้ตรงกับที่เก็บข้อมูลระยะไกลของ SYNC คุณอาจเรียกสิ่งนี้ว่า "hard pull" อย่างไรก็ตามมันปลอดภัยเนื่องจากเราสำรองข้อมูลการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดที่เรามีในเครื่อง PC2 แล้วดังนั้นจึงไม่มีอะไรหายไป!
- แค่นั้นแหละ! ตอนนี้คุณได้สร้างสำเนาที่สมบูรณ์แบบจาก PC1 ไปยัง PC2 โดยไม่ต้องรับรองไดเรกทอรีการทำงานที่สะอาดเนื่องจากสคริปต์จัดการการส่งข้อมูลอัตโนมัติและสิ่งต่าง ๆ ให้คุณ! มันรวดเร็วและทำงานได้ดีมากบนที่เก็บขนาดใหญ่ ตอนนี้คุณมีกลไกง่าย ๆ ในการใช้IDE ใด ๆ ที่คุณเลือกบนเครื่องหนึ่งในขณะที่สร้างหรือทดสอบบนเครื่องอื่นได้อย่างง่ายดายผ่านฮอตสปอตไร้สายจากโทรศัพท์มือถือของคุณหากจำเป็นแม้ว่าพื้นที่เก็บข้อมูลจะมีหลายสิบกิกะไบต์ และทรัพยากร จำกัด
แหล่งข้อมูล:
- โครงการทั้งหมด: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
- ดูลิงค์และการอ้างอิงอื่น ๆ อีกมากมายในซอร์สโค้ดเองภายในโครงการนี้
- วิธีทำ "hard pull" ตามที่ฉันเรียกว่า: ฉันจะบังคับ "git pull" เพื่อเขียนทับไฟล์โลคัลได้อย่างไร
ที่เกี่ยวข้อง:
- ที่เก็บคอมไพล์ซิงค์ระหว่างคอมพิวเตอร์เมื่อเคลื่อนที่ไปรอบ ๆ ?