จะอัพเดท git clone --mirror ได้อย่างไร?


144

ฉันได้สร้างที่เก็บ git เพื่อมิเรอร์ไซต์สด (ซึ่งเป็นที่เก็บ git ที่ไม่ได้เปลือย):

git clone --mirror ssh://user@example.com/path/to/repo

ทีนี้เพื่อให้มิร์เรอร์โคลนนี้อัพเดตด้วยการเปลี่ยนแปลงทั้งหมดจากแหล่งกำเนิดรีโมตของมันคำสั่งหรือคำสั่งใดที่ฉันต้องใช้?

ฉันต้องการอัปเดตทุกอย่าง: คอมมิชชันผู้อ้างอิงตะขอสาขา ฯลฯ

ขอบคุณ!

คำตอบ:


213

นี่คือคำสั่งที่คุณต้องใช้ในการมิเรอร์:

git remote update

@ Magnus Skog: เยี่ยมมาก ขอบคุณ! ทั้งหมดนี้หรือไม่ ฉันต้องการคำสั่งอื่นgit fetchหรือไม่ หรือgit remote updateคนเดียวจะทำมันทั้งหมดหรือไม่
J. Bruni

11
ฉันต้องการทราบด้วยเช่นกันความแตกต่างของการเรียก git คืออะไร
Thorbjørn Ravn Andersen

1
@ Thorbjörn (คุณจะต้องทำอย่างไรกับชาวสวีเดนö :)): Git fetch เพิ่งอัปเดตที่เก็บของคุณด้วยการอ้างอิงจากระยะไกลจากระยะไกล คำสั่งนี้จะอัปเดตทุกอย่างในที่เก็บแบบมิเรอร์
ralphtheninja

4
นี่คือคำตอบที่ดีที่อธิบายเพิ่มเติม: stackoverflow.com/questions/3959924/…
ralphtheninja

16
'git remote update --prune' จะทำสิ่งนี้ทั้งหมด แต่จะลบสาขาเมื่อมันถูกลบออกจากพื้นที่เก็บข้อมูลดั้งเดิม
teeks99

8

เกี่ยวกับการกระทำการอ้างอิงสาขาและ " et cetera " คำตอบของแมกนัสก็ใช้ได้ผล ( git remote update)

แต่น่าเสียดายที่ไม่มีวิธีการclone/ mirror / update hooksตามที่ฉันต้องการ ...

ฉันได้พบกระทู้ที่น่าสนใจมากเกี่ยวกับการโคลน / การมิเรอร์ hooks:

http://kerneltrap.org/mailarchive/git/2007/8/28/256180/thread

ฉันได้เรียนรู้:

  • hooks ไม่ถือเป็นส่วนหนึ่งของเนื้อหาที่เก็บ

  • มีข้อมูลเพิ่มเติมเช่น.git/descriptionโฟลเดอร์ซึ่งไม่ได้รับการโคลนเหมือนตะขอ

  • hooks เริ่มต้นที่ปรากฏในhooksdir มาจากTEMPLATE_DIR

  • มีtemplateคุณสมบัติที่น่าสนใจเกี่ยวกับคอมไพล์

ดังนั้นฉันอาจเพิกเฉย "โคลนสิ่งตะขอ" นี้หรือไปสำหรับrsyncกลยุทธ์ตามวัตถุประสงค์ของมิเรอร์ของฉัน (สำรอง + แหล่งที่มาสำหรับโคลนอื่น ๆ เท่านั้น)

อืม ... ฉันจะลืมเกี่ยวกับการโคลนนิ่งของตะขอและยึดไปตามgit remote updateทาง

  • Sehe เพิ่งชี้ให้เห็นว่าไม่เพียง "hooks" ไม่ได้ถูกจัดการโดยกระบวนการclone/ updateแต่ยังซ่อน, rerere, ฯลฯ ... ดังนั้นสำหรับการสำรองข้อมูลที่เข้มงวดrsyncหรือเทียบเท่าจะเป็นวิธีที่จะไป เช่นนี้ไม่จำเป็นจริงๆในกรณีของฉัน (ฉันสามารถจ่ายได้ไม่ได้มีตะขอ stashes, และอื่น ๆ ) remote updateเช่นผมบอกว่าผมจะติดกับ

ขอบคุณ! ปรับปรุง bit "git-fu" ของฉันเอง ... :-)


5

ดูที่นี่: Git ไม่ได้ทำการโคลนนิ่งทุกกิ่งในโคลนที่ตามมาใช่ไหม

หากคุณต้องการสิ่งนี้โดยดึงกิ่งไม้แทนคุณpush --mirrorสามารถดูได้ที่นี่:

"fetch - all" ใน repository เปล่า ๆ ไม่ได้ซิงโครไนซ์กิ่งสาขาในท้องที่กับรีโมต

คำตอบนี้ให้รายละเอียดขั้นตอนโดยละเอียดเกี่ยวกับวิธีการบรรลุผลนั้นค่อนข้างง่าย:


1
pushไม่ใช่ตัวเลือกสำหรับฉันเพราะฉันต้องทำที่ด้านรับ (จากที่ที่มีการโคลน); pullยังไม่ใช่ตัวเลือกเนื่องจากที่เก็บข้อมูลมิเรอร์เป็นพื้นที่เก็บข้อมูลเปลือย (ไม่มีแผนผังการทำงานดังนั้นจึงไม่มี "การดึง") - ดูเหมือนว่าgit remote updateจะทำทุกอย่างแน่นอน (ง่ายกว่าคำตอบที่อ้างอิง) ... ยังไงก็ตามขอบคุณ! แน่นอนว่ามีข้อมูลที่มีค่าในคำถาม / คำตอบที่เชื่อมโยง
J. Bruni

1
ตกลงฉันหมายถึงการดึงเหมือนในการพูดจาปกติ เทคโนโลยีการผลักและดึง มีอีกคำหนึ่งที่ค่อนข้างไร้สาระยกเว้น 'รับข้อมูลจากระยะไกลอย่างแข็งขันที่ลูกค้า' ซึ่งจะไม่พากย์คำที่มีความหมายต่อระบบ git หรือ DVCS :) ลิงก์ที่สองจะให้รายละเอียดที่คุณต้องการ โปรดทราบว่า 'การปรับปรุงระยะไกลของคอมไพล์' ไม่ได้รักษาสถานะ 'มิเรอร์' โดยไม่ได้มีการดำเนินการพิเศษดังกล่าว
sehe

1
อืม ... ขออภัย (HTH) - ดูเหมือนว่า "สัมบูรณ์" มิเรอร์สามารถทำได้ง่ายกว่าผ่าน "rsync" ของโฟลเดอร์ repo ดั้งเดิม ... ไม่ใช่สิ่งที่ฉันต้องการ แต่ฉันได้ทำการทดสอบ ... และไม่มีอะไรที่ดูเหมือนว่าจะคัดลอกตะขอ - ซึ่งผมสนใจเฉพาะอย่างยิ่งใน ...
เจ Bruni

1
FYI, วัตถุประสงค์ของมิเรอร์นี้คือ: 1) การสำรองข้อมูลที่สมบูรณ์จากที่ที่ฉันสามารถกู้คืนได้หากข้อมูลในเซิร์ฟเวอร์ repo ดั้งเดิมสูญหาย 2) ที่ไหนสักแห่งจากที่ที่คนอื่นสามารถลอกเลียนแบบและรับ repo ที่ทำงานในท้องถิ่นได้โดยไม่ต้องเข้าถึงแหล่งซื้อคืนต้นฉบับ
J. Bruni

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