ฉันสร้างที่เก็บเปล่าเพื่อเผยแพร่ที่เก็บของฉัน แต่ฉันไม่สามารถหาวิธีอัปเดตที่เก็บเปล่าด้วยสถานะปัจจุบันของที่เก็บหลัก
ฉันสร้างที่เก็บเปล่าเพื่อเผยแพร่ที่เก็บของฉัน แต่ฉันไม่สามารถหาวิธีอัปเดตที่เก็บเปล่าด้วยสถานะปัจจุบันของที่เก็บหลัก
คำตอบ:
หากคุณต้องการทำซ้ำวัตถุทั้งหมดจาก repo หลักให้ทำสิ่งนี้ภายใน repo หลัก:
git push --all <url-of-bare-repo>
หรือทำการดึงข้อมูลภายใน repo เปล่า:
git fetch <url-of-main-repo>
คุณไม่สามารถทำการดึงได้เนื่องจากการดึงต้องการรวมเข้าด้วยHEADกันซึ่ง repo เปล่าไม่มี
คุณสามารถเพิ่มสิ่งเหล่านี้เป็นรีโมทเพื่อช่วยตัวคุณเองในการพิมพ์ในอนาคต:
git remote add <whatever-name> <url-of-other-repo>
จากนั้นคุณสามารถทำได้
git push --all <whatever-name>
หรือ
git fetch <whatever-name>
ขึ้นอยู่กับว่าคุณอยู่ใน repo ใดหาก<whatever-name>เป็นoriginเช่นนั้นคุณสามารถละทิ้งได้เลย
ข้อจำกัดความรับผิดชอบ: ฉันไม่ใช่กูรูด้านความรู้ ถ้าฉันพูดอะไรผิดฉันอยากจะรู้แจ้ง!
Update: อ่านคอมเม้น!
git-fetch --allภายในที่เก็บเปล่าฉันไม่เห็นการอัปเดตที่ฉันทำกับที่เก็บหลัก แต่เมื่อผลักดันจาก repo หลักด้วยgit push --all <url-of-bare-repo>ฉันจะเห็นการอัปเดตในgit log. คงจะมีคำอธิบายง่ายๆสำหรับเรื่องนี้ - มีใครอธิบายได้บ้าง?
git logไม่แสดงการอัปเดตเหล่านี้ในที่เก็บข้อมูลเปล่า (ไม่ทำgit log --allและไม่ทำ repo ที่ใช้งานได้ซึ่งสร้างขึ้นโดยการโคลน repo เปล่า - ไม่ว่าจะผ่านgit log --allหรือเพียงแค่ดูไฟล์ใหม่ที่ควรปรากฏที่นั่น) เป็นการทดสอบที่ค่อนข้างรวดเร็วเพื่อดูตัวคุณเอง ส่วนใหญ่ฉันแค่อยากรู้ว่าฉันขาดอะไรไป
git fetch -q origin master:masterภายใน repo เปล่าในพื้นที่ของคุณ สิ่งนี้จะดึงข้อมูลใหม่จากสาขาหลักของ github และอัปเดตสาขาหลักในพื้นที่ของคุณเป็น
master:masterคือสิ่งที่จำเป็นในการย้าย HEAD ไปข้างหน้าไปยัง repo ระยะไกล ในกรณีของฉันเนื่องจากมีปัญหาฉันไม่สามารถเชื่อมต่อกับ repo เปล่าของเราได้อีกต่อไปเพราะ git หายไป จนกว่าจะได้รับการแก้ไขฉันจะทำอุโมงค์ย้อนกลับและดึงไปที่ repo ส่วนกลางโดยใช้: git fetch ssh://localhost:8765/... master:masterและมันใช้งานได้ดี ขอบคุณ!
git fetch origin *:*
ฉันสร้างที่เก็บโดยใช้คำสั่งต่อไปนี้
git clone --bare <remote_repo>
จากนั้นฉันพยายามอัปเดตโคลนเปล่าโดยใช้คำตอบของโทมัส แต่มันไม่ได้ผลสำหรับฉัน ในการรับที่เก็บเปล่าเพื่ออัปเดต (ซึ่งเป็นสิ่งที่ฉันคิดว่า Let_Me_Be กำลังขอ) ฉันต้องสร้างที่เก็บมิเรอร์:
git clone --mirror <remote_repo>
จากนั้นฉันสามารถรันคำสั่งต่อไปนี้ในที่เก็บมิเรอร์เพื่อคว้าการอัปเดตของที่เก็บหลัก:
git fetch --all
ฉันเจอโซลูชันนี้โดยการอ่านMirror a Git Repository By Pulling
[remote "origin"]ส่วนเพิ่มfetch = +refs/*:refs/*และmirror = true
ทางออกเดียวที่นอกเหนือจากการสร้างด้วยgit clone --mirrorคือจากเกรเกอร์ :
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
จากนั้นคุณgit fetchจะเห็นการอัปเดต สิ่งที่แปลกคือก่อนหน้านี้แม้ว่าจะมีการremoteกำหนดค่าไว้ แต่ก็ไม่มีสาขาอยู่ในรายการgit branch -a.
git remote updateทำงานได้
--forceและ--pruneตามลำดับในgit fetchบรรทัด
สมมติว่า:
$ git clone --bare https://github.com/.../foo.git
ดึงข้อมูลด้วย:
$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
หมายเหตุ: --git-dir=foo.gitไม่จำเป็นหากคุณcdไปที่ไดเร็กทอรีก่อน
originไม่ได้กำหนดไว้คุณสามารถแทนที่originส่วนนั้นด้วย path / url ไปยังที่เก็บเดิมของคุณได้ตลอดเวลา เช่น$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
หลังจากยุ่งมากฉันพบว่าสิ่งนี้เหมาะกับฉัน
ครั้งเดียว:
git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
ทุกครั้งที่ฉันต้องการซิงค์:
cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git fetch ssh://git@source.address:2000/repo
git push --mirror remote_site
git config remote.origin.fetch 'refs/heads/*:refs/heads/*') คือกุญแจสำคัญ คำตอบที่ดีขอบคุณ!
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'คือคำตอบ หลังจากกดปุ่มคำสั่งนี้ฉันสามารถทำได้git fetchและ repo จะซิงค์กับรีโมต
เพิ่มพื้นที่เก็บข้อมูลเปลือยเป็นพื้นที่เก็บข้อมูลระยะไกล, git pushการใช้งานแล้ว
สำหรับฉันชุดค่าผสมนี้ใช้งานได้:
git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/*:refs/heads/*
git fetch -u remote_site +refs/tags/*:refs/tags/*
git push --mirror
จำเป็นต้องมีพารามิเตอร์ -u สำหรับการดึงข้อมูลมิฉะนั้นฉันจะได้รับข้อความแสดงข้อผิดพลาด: "การปฏิเสธที่จะดึงข้อมูลไปยังสาขาปัจจุบัน refs / head / master of non-bare repository" (ดูเพิ่มเติมที่https://stackoverflow.com/a/19205680/4807875 )