การเก็บที่เก็บคอมไพล์บนโฮสต์ที่ต่างกันให้ตรงกัน


34

ฉันกำลังคิดเกี่ยวกับการเริ่มต้นโครงการขนาดเล็กและฉันต้องการสร้างเวอร์ชันด้วย git

Bitbucketเป็นตัวเลือกที่ดีสำหรับฉันด้วยแผนการฟรี ฉันต้องการใช้เป็นเครื่องมือหลักในการทำงานกับ git เนื่องจากมีเครื่องมือที่ดีเช่นเว็บอินเตอร์เฟสไคลเอนต์ Mac OS และอื่น ๆ แต่เพื่อให้มีการป้องกันที่สูงขึ้นจากความเสียหายจากอุบัติเหตุใด ๆ ที่อาจเกิดขึ้นจากการใช้บริการของบุคคลที่สามฉันต้องการติดตั้ง git บน NAS ของฉันเป็นสำเนาสำรองที่สองของที่เก็บ

ตอนนี้คำถามของฉันคือว่ามันเป็นไปได้ที่จะสร้างพื้นที่เก็บข้อมูลในสองโฮสต์ที่แตกต่างกันและจากนั้นให้พวกเขาซิงค์? ตัวอย่างเช่นสมมติว่าหนึ่งครั้งต่อสัปดาห์ฉันอัปเดตที่เก็บใน NAS ของฉันเพื่อจับคู่กับ Bitbucket จากนั้นในกรณีที่มีบางอย่างเกิดขึ้นกับ Bitbucket ฉันจะยังคงมีพื้นที่เก็บข้อมูลเต็มรูปแบบที่มีประวัติการพัฒนาเต็มรูปแบบบนพื้นที่เก็บข้อมูล NAS ในพื้นที่ของฉัน

และมีวิธีการนำเข้าที่เก็บข้อมูลที่มีประวัติเต็มไปยังบริการ git อื่นหรือไม่?


ฉันคิดว่าการมิเรอร์เป็นสิ่งที่ฉันต้องการ นี้บทความดูเหมือนว่าจะอธิบายสิ่งที่ฉันต้องการ และนี้อย่างใดอย่างหนึ่งเช่นกัน

ฉันเชื่อว่ามันจะทำสำเนาเต็มรูปแบบที่มีประวัติเต็มรูปแบบและยังมอบเวอร์ชันใหม่ให้กับที่เก็บบนโฮสต์ทั้งสองโดยอัตโนมัติ

ฉันถูกไหม?


ฉันกำลังใช้ xpdev ฉันสงสัยในสถานการณ์ระบบ 2 ของคุณสิ่งที่ bennefit จะเป็นของ git rusing ในกรณีของคุณ เพียงเพื่อให้แน่ใจว่าจากทุกครั้งสุดท้ายฉันสร้างการสำรองข้อมูล usb แต่การควบคุมเวอร์ชันเป็นพื้นฐานจะจัดการ whitin xpdev ดังนั้นจึงไม่ใช่ข้อกำหนดที่แท้จริง BTW หากคุณเป็นเจ้าของหลักฐานโง่ ๆ NASS Raid1 หรือดังนั้นคุณอาจลองใช้ระบบการกำหนดรุ่นของคุณเองก็มีบาง freeones ด้วย
user613326

แต่ฉันต้องการให้เวอร์ชันเต็มใช้ได้ใน 2 แห่ง หาก บริษัท โฮสติ้งของบุคคลที่สามเสียชีวิตหรือ บริษัท ดำเนินการเพียงแค่หายไปฉันต้องการมีประสบการณ์แบบเดียวกันกับประวัติการใช้งานเวอร์ชันทั้งหมด ...
BartoNaz

นั่นหมายความว่าฉันจะมี Bitbucket เพื่อความสะดวกสบายและคอมไพล์บน NAS เพื่อความปลอดภัย 99.9%
BartoNaz

สำหรับ xp-dev บริษัท ที่ไม่น่าจะเสียชีวิตพวกเขาอาจเปลี่ยนแผนการให้บริการโฮสติ้งโค้ดราคา ฯลฯ หรือรวมเข้ากับ บริษัท อื่น แต่มันเป็นเงิน milkcow สำหรับพวกเขา และพวกเขายังจะสำรองข้อมูลที่มีค่า มันเป็นธุรกิจของพวกเขาที่จะอยู่ในสถานที่ ฉันใช้กับนักพัฒนา 3 คนและโค้ดของเรามีอยู่ที่ 5 เครื่องที่แตกต่างกันซึ่งมีการคัดลอกซอร์สในเครื่องที่ได้รับการซิงค์ที่ xp dev เสมอ XP dev ไม่มีค่าใช้จ่ายหากคุณมีโครงการเพียงไม่กี่โครงการ
user613326

1
แน่นอนมันไม่น่าเป็นไปได้ แต่ถึงกระนั้นคุณก็ไม่มีทางแน่ใจได้ 100% ...
BartoNaz

คำตอบ:


19

ใช่นั่นคือความงามของ DVCS เช่นคอมไพล์ คุณสามารถใช้ repos ที่แตกต่างกันจำนวนเท่าใดก็ได้ที่มีสถานะเดียวกับ Bitbucket หรือ GitHub

แม้คุณจะคัดลอกในพื้นที่ (ที่เก็บในคอมพิวเตอร์ของคุณ) มักจะเป็นโคลนเต็มรูปแบบของ repo ระยะไกล

สิ่งเดียวที่คุณต้องทำเพื่อรักษา repos หลาย ๆ ตัวให้ตรงกันคือการดึงหนึ่ง (โดยปกติเรียกว่า Origin หรือ upstream) และผลักไปที่สำเนาสำรอง


11
น่าเสียดายที่มันไม่ได้เป็นประกาย ดูเอาเตือนของKDE ซึ่งอยู่ใกล้กับภัยพิบัติ นั่นคือตรวจสอบให้แน่ใจว่าการสำรองข้อมูลไม่ลบสิ่งต่าง ๆ (สาขาที่เก็บ ฯลฯ ) ที่ถูกลบบนเซิร์ฟเวอร์ที่สำรองข้อมูล
Jan Hudec

ฉันยังไม่แน่ใจว่าฉันเข้าใจถูกต้องหรือไม่ เท่าที่ฉันเข้าใจการกดและการดึงใช้งานได้กับเวอร์ชันที่กำหนด แต่สมมุติว่าฉันมีรหัสรุ่นล่าสุดในเครื่องทำงานของฉัน ฉันมีที่เก็บ git บนรีโมตโฮสต์ (Bitbucket, Github หรืออะไรก็ได้) ที่มีประวัติเต็มของการพัฒนาโค้ดจนถึงเวอร์ชันล่าสุดที่ฉันมีบนเครื่องที่ทำงาน และฉันมีที่เก็บใน NAS ที่ว่างเปล่า ฉันสามารถนำเข้าประวัติแบบเต็มของรหัสจากรีโมตโฮสต์ไปยัง NAS ของฉันเพื่อให้ฉันมีที่เก็บสองอันเหมือนกันในสองแห่งและอย่างไร
BartoNaz

2
โคลนที่เก็บระยะไกลจากนั้นดึงการอัปเดตทั้งหมด (สาขาทั้งหมด) ไปยังช่วงเวลาปกติ โคลนคอมไพล์มีประวัติมันไม่เหมือนกับการชำระเงิน svn ที่มีเฉพาะรุ่นล่าสุด
Wilbert

11

ต่อไปนี้เป็นวิธีแก้ไขปัญหาที่ทดสอบแล้ว: Automatic Sync 2 Remote Git Repositories

สคริปต์อย่างง่ายสำหรับการซิงค์ที่เก็บข้อมูล Git ระยะไกล 2 รายการ

ฉันค้นหาเว็บสคริปต์ง่ายๆที่จะซิงค์ 2 ที่เก็บข้อมูลระยะไกล แต่ฉันไม่พบสคริปต์แบบนี้แม้จะมีหลายคนที่มองหามัน! ดังนั้นฉันจึงสร้างคลังเก็บทดสอบอย่างง่าย 2 แห่งและเริ่มทำการทดสอบและสร้างสคริปต์ดังกล่าว

สคริปต์ดังกล่าวควรทำอย่างไร

โดยทั่วไปขั้นตอนสำหรับการทำนั้นง่าย: 1. โคลนที่เก็บข้อมูลแรก 1. เพิ่มอันที่สองเป็นที่เก็บรีโมตเพิ่มเติม 1. ดึงข้อมูลทั้งหมดที่มีอยู่ในที่เก็บที่สอง 1. กดที่เก็บโลคัลที่อัพเดตไปยัง 2 ที่เก็บข้อมูลระยะไกล

ปัญหาที่เหลือคือ - สวิตช์ที่ถูกต้องสำหรับคำสั่ง git ทั้งหมดข้างต้นคืออะไร?

ดังนั้นนี่คือ ...

2repos-sync.sh สคริปต์ gisp

# Clear the folder first - please use this carefully
rm -rf $REPO_NAME  
# clone the reposotory
git clone --bare $ORIGIN_URL

# add a remote repository
cd $REPO_NAME
git remote add --mirror=fetch repo1 $REPO1_URL

# update the local copy from the first repository
git fetch origin --tags

# update the local copy with the second repository
git fetch repo1 --tags

# sync back the 2 repositories
git push origin --all
git push origin --tags
git push repo1 --all
git push repo1 --tags

หมายเหตุ - สคริปต์นี้ไม่ได้แก้ไขกรณีความขัดแย้งระหว่างเนื้อหาในที่เก็บ!


คุณอาจต้องการพูดถึงในคำตอบของคุณว่าสิ่งแรกที่คุณทำคือลบไดเรกทอรีท้องถิ่นที่มีอยู่ด้วย $ REPO_NAME สิ่งนี้ดูเหมือนมีความสำคัญและอาจป้องกันข้อมูลสูญหายสำหรับผู้ที่เพียงคัดลอกโซลูชันของคุณ
Wilbert

เมื่อต้องการทำสิ่งนี้LibGit2มีประโยชน์สำหรับสิ่งนี้
RubberDuck

0

ฉันใช้ GitLab ส่วนตัวเพื่อจัดเก็บที่เก็บข้อมูลทั้งหมดของฉันดังนั้นฉันจึงมีแหล่งกำเนิดเดียวที่ฉันผลักดันและดึงในขณะที่ฉันกำลังพัฒนาแบบวันต่อวัน

แต่สำหรับโครงการโอเพนซอร์ส GitHub เป็นชุมชนที่มีชีวิตชีวามากขึ้นดังนั้นถ้าฉันต้องการยอมรับการมีส่วนร่วมของชุมชนในโครงการของฉันฉันใช้ระบบ web hook ของเว็บ GitLab เพื่อ ping เซิร์ฟเวอร์ที่ฉันทำงานซึ่งจะอัพเดท repos สาธารณะของฉันบน GitHub

สิ่งนี้ช่วยให้ฉันปฏิบัติต่อ GitHub เป็นรีโมทที่ฉันสามารถดึงออกมาได้เมื่อมีคนมีส่วนร่วม - จากนั้นฉันก็รวม - ไม่มี ff ในพื้นที่และมีกระแสไปสู่ที่เก็บหลักและสาธารณะทั้งหมดของฉันกระจายการเปลี่ยนแปลง

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