ฉันจะแยกที่เก็บข้อมูลสาธารณะ แต่ทำให้แยกเป็นส่วนตัวได้อย่างไร ฉันมีการสมัครสมาชิกเพื่อสนับสนุนที่เก็บส่วนตัว
ฉันจะแยกที่เก็บข้อมูลสาธารณะ แต่ทำให้แยกเป็นส่วนตัวได้อย่างไร ฉันมีการสมัครสมาชิกเพื่อสนับสนุนที่เก็บส่วนตัว
คำตอบ:
คำตอบนั้นถูกต้อง แต่อย่าพูดถึงวิธีซิงค์รหัสระหว่าง repo สาธารณะและทางแยก
นี่คือขั้นตอนการทำงานเต็มรูปแบบ (เราได้ทำสิ่งนี้ก่อนที่จะเปิดแหล่งข้อมูลReact Native ):
ก่อนอื่นทำซ้ำ repo ตามที่คนอื่นพูด (รายละเอียดที่นี่ ):
สร้าง repo ใหม่ (ขอเรียกว่าprivate-repo
) ผ่านทางGithub UI แล้ว:
git clone --bare https://github.com/exampleuser/public-repo.git
cd public-repo.git
git push --mirror https://github.com/yourname/private-repo.git
cd ..
rm -rf public-repo.git
โคลน repo ส่วนตัวเพื่อให้คุณสามารถทำงานกับมัน:
git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master
หากต้องการดึงความนิยมใหม่จากการซื้อคืนสาธารณะ:
cd private-repo
git remote add public https://github.com/exampleuser/public-repo.git
git pull public master # Creates a merge commit
git push origin master
ยอดเยี่ยมตอนนี้ repo ส่วนตัวของคุณมีรหัสล่าสุดจาก repo สาธารณะรวมถึงการเปลี่ยนแปลงของคุณ
ขั้นตอนสุดท้ายในการสร้างคำขอซื้อคืน repo ส่วนตัว -> repo สาธารณะ:
ใช้ GitHub UI เพื่อสร้างทางแยกของ repo สาธารณะ (ปุ่ม "Fork" ขนาดเล็กที่ด้านบนขวาของหน้า repo สาธารณะ) แล้ว:
git clone https://github.com/yourname/the-fork.git
cd the-fork
git remote add private_repo_yourname https://github.com/yourname/private-repo.git
git checkout -b pull_request_yourname
git pull private_repo_yourname master
git push origin pull_request_yourname
ตอนนี้คุณสามารถสร้างการร้องขอดึงผ่าน Github UI สำหรับประชาชน-repo ตามที่อธิบายไว้ที่นี่
เมื่อเจ้าของโครงการตรวจสอบคำขอดึงของคุณพวกเขาสามารถรวมได้
แน่นอนว่ากระบวนการทั้งหมดสามารถทำซ้ำได้ (เพียงแค่ออกจากขั้นตอนที่คุณเพิ่มรีโมท)
git clone
จะตั้งสาขาติดตามระยะไกลและอาจกำหนดค่าอื่น ๆ ใน repo ที่คุณไม่ต้องการ ในขณะที่ - แบร์โคลนเพียงแค่คัดลอก. git dir จากระยะไกลตามที่เป็นอยู่
git status
แสดงทุกสิ่งให้ทันสมัยต้นไม้ทำงานทำความสะอาดไม่ว่าฉันจะเปลี่ยนอะไร ดังนั้นฉันไม่สามารถกระทำและผลักดันอะไร ฉันลบ repo ส่วนตัวใหม่ฉันได้ลองอีก 2 ครั้ง แต่ก็ยังพบปัญหาเดิมอยู่ ข้อเสนอแนะใด ๆ
มีอีกหนึ่งตัวเลือกตอนนี้ (มกราคม - 2558)
คำตอบปัจจุบันค่อนข้างล้าสมัยดังนั้นเพื่อความชัดเจน:
คำตอบสั้น ๆ คือ:
เอกสารนี้มีไว้ใน GitHub: การทำสำเนา -a -repository
คุณต้องทำซ้ำ repo
คุณสามารถดูเอกสารนี้ (จาก GitHub)
ในการสร้างซ้ำของที่เก็บโดยไม่ต้องฟอร์กคุณจะต้องรันคำสั่งโคลนพิเศษกับที่เก็บต้นฉบับและมิเรอร์ดันไปที่ใหม่
ในกรณีดังต่อไปนี้ที่เก็บข้อมูลที่คุณพยายามที่จะส่งไป - เช่น exampleuser / new-repository หรือ exampleuser / mirrored - ควรมีอยู่แล้วบน GitHub ดู "การสร้างที่เก็บใหม่" สำหรับข้อมูลเพิ่มเติม
ทำมิเรอร์ที่เก็บ
หากต้องการทำสำเนาที่แน่นอนคุณต้องดำเนินการทั้งโคลนแบบเปลือยและแบบกดกระจก
เปิดบรรทัดคำสั่งและพิมพ์คำสั่งเหล่านี้:
$ git clone --bare https://github.com/exampleuser/old-repository.git # Make a bare clone of the repository $ cd old-repository.git $ git push --mirror https://github.com/exampleuser/new-repository.git # Mirror-push to the new repository $ cd .. $ rm -rf old-repository.git # Remove our temporary local repository
หากคุณต้องการทำมิเรอร์ที่เก็บในอีกตำแหน่งหนึ่งรวมถึงการรับการอัพเดตจากต้นฉบับคุณสามารถโคลนมิเรอร์และผลักดันการเปลี่ยนแปลงเป็นระยะ
$ git clone --mirror https://github.com/exampleuser/repository-to-mirror.git # Make a bare mirrored clone of the repository $ cd repository-to-mirror.git $ git remote set-url --push origin https://github.com/exampleuser/mirrored # Set the push location to your mirror
เช่นเดียวกับโคลนเปล่าโคลนที่ทำมิเรอร์จะรวมกิ่งก้านและแท็กระยะไกลทั้งหมด แต่การอ้างอิงในเครื่องทั้งหมดจะถูกเขียนทับทุกครั้งที่คุณดึงข้อมูลดังนั้นมันจะเหมือนกับที่เก็บต้นฉบับเสมอ การตั้งค่า URL สำหรับการผลักทำให้การเลื่อนไปที่มิเรอร์ของคุณง่ายขึ้น หากต้องการอัปเดตมิเรอร์ของคุณให้ดึงการอัปเดตและพุชซึ่งอาจเป็นไปโดยอัตโนมัติด้วยการเรียกใช้งาน cron
$ git fetch -p origin $ git push --mirror
ขณะนี้ GitHub มีตัวเลือกการนำเข้าที่ให้คุณเลือกสิ่งที่คุณต้องการให้เป็นพื้นที่เก็บข้อมูลที่นำเข้าใหม่เป็นสาธารณะหรือส่วนตัว