Git ส้อมจริงแล้ว Git โคลน


817

ฉันได้ยินคนพูดอยู่เสมอว่าพวกเขากำลังใช้รหัสใน Git Git "fork" ฟังดูน่าสงสัยเหมือน Git "clone" บวกกับความตั้งใจด้านจิตใจ (ไร้ความหมาย) ที่จะละทิ้งการรวมในอนาคต ไม่มีคำสั่ง fork ใน Git ใช่ไหม

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

ใช่ไม่ใช่? มีความกังวลใด ๆ เกี่ยวกับ GitHub หรือไม่ที่ขยาย Git ในทิศทางนี้? หรือข่าวลือใด ๆ ของ Git ที่ดูดซับการทำงาน?


10
ใช่มันเป็นเพียงโคลนชนิดหนึ่งที่ถูกติดตามโดยฐานข้อมูล Github
Paŭlo Ebermann

15
GitHub ทำอะไรเป็นพิเศษหรือไม่เพื่อหลีกเลี่ยงการเพิ่มความต้องการพื้นที่เก็บข้อมูล (บนเซิร์ฟเวอร์ของ GitHub)?
Keith Thompson

18
ยังไม่ได้กล่าวถึง: การลบ repo ส่วนตัวลบส้อมทั้งหมด การลบ repo สาธารณะเก็บ forks แต่ส่งเสริมส้อมหนึ่งเป็น repo หลักใหม่ หากเจ้านายของคุณทำให้ repo สาธารณะเป็นส่วนตัวมันจะแยกส้อมที่มีอยู่ทั้งหมดและคุณจะไม่สามารถดึงคำขอจากพวกเขาไปยัง repo ส่วนตัวได้ help.github.com/articles/…
เพลโต

ฉันเชื่อ (ไม่มีข้อพิสูจน์เพราะ GitHub ไม่ได้แสดงสิ่งนี้กับเรา) ว่ากลไกที่แท้จริงที่นี่คือ "ทางเลือก" ของ Git กล่าวอีกนัยหนึ่งส้อมเป็นโคลนกระจกที่--referenceใช้แล้ว วิธีจัดการ repos สาธารณะและการลบไม่ชัดเจนเลย (ย้ายสลับไปที่ repo ที่ได้รับการเลื่อนโดยสุ่มชี้ให้ทุกคนหันไปหาทางเลือกทั่วไปที่ไม่ได้เป็นส่วนหนึ่งของทางแยกเดิม) แต่การใช้ทางเลือกนั้นอธิบายพฤติกรรมที่สังเกตได้หลายอย่าง
torek

คำตอบ:


925

Forkในบริบทของ GitHub จะไม่ขยาย Git
อนุญาตเฉพาะการโคลนบนฝั่งเซิร์ฟเวอร์

เมื่อคุณโคลนที่เก็บ GitHub บนเวิร์กสเตชันท้องถิ่นของคุณคุณไม่สามารถมีส่วนร่วมกลับไปที่พื้นที่เก็บข้อมูลต้นน้ำเว้นแต่คุณจะประกาศอย่างชัดเจนว่าเป็น "ผู้มีส่วนร่วม" นั่นเป็นเพราะโคลนของคุณเป็นตัวอย่างที่แยกต่างหากของโครงการ หากคุณต้องการมีส่วนร่วมในโครงการคุณสามารถใช้การฟอร์กเพื่อทำด้วยวิธีดังต่อไปนี้:

  • โคลนที่เก็บ GitHub ในบัญชี GitHub ของคุณ (นั่นคือส่วน"fork"ซึ่งเป็นโคลนที่ฝั่งเซิร์ฟเวอร์)
  • มีส่วนร่วมมุ่งมั่นที่เก็บ GitHub นั้น (มันอยู่ในบัญชี GitHub ของคุณเองดังนั้นคุณมีสิทธิ์ที่จะผลักดันมัน)
  • ส่งสัญญาณการมีส่วนร่วมที่น่าสนใจกลับไปที่ที่เก็บ GitHub ดั้งเดิม (นั่นคือส่วน"คำขอการดึง"โดยวิธีการเปลี่ยนแปลงที่คุณทำกับที่เก็บ GitHub ของคุณเอง)

ตรวจสอบด้วย " Collaborative GitHub Workflow "

หากคุณต้องการเก็บลิงค์ไว้กับที่เก็บต้นฉบับ (หรือเรียกอีกอย่างว่า upstream) คุณต้องเพิ่มรีโมตที่อ้างอิงถึงที่เก็บต้นฉบับนั้น
ดู " ความแตกต่างระหว่างต้นกำเนิดและต้นน้ำบน GitHub คืออะไร "

ทางแยกและต้นน้ำ

และด้วย Git 2.20 (ไตรมาสที่ 4 ปี 2018) และอื่น ๆ ในการดึงข้อมูลจากส้อมมีประสิทธิภาพมากขึ้นด้วยเกาะเดลต้า


6
"เมื่อคุณโคลน repo GitHub บนเวิร์กสเตชันท้องถิ่นของคุณคุณจะไม่สามารถมีส่วนร่วมกับ repo ต้นน้ำเว้นแต่ว่าคุณได้รับการประกาศอย่างชัดเจนว่าเป็น" ผู้มีส่วนร่วม "" --- นี่มันไม่จริงกับ "การฟอร์ก" หรือไม่? กรุณาอธิบาย.
chharvey

61
@ TestSubject528491 ไม่พร้อมกับ fork ซึ่งหมายความว่าคุณกำลังโคลน repo upstream เป็น repo ของคุณเองบนฝั่งเซิร์ฟเวอร์ GitHub จากนั้นคุณสามารถคัดลอกซ้ำว่า "fork" repo ใหม่บนคอมพิวเตอร์ของคุณและกดกลับได้อย่างอิสระเนื่องจากคุณเป็นผู้สร้างและเจ้าของส้อมนั้น
VonC

9
สำหรับผมแล้วจุดสำคัญคือการที่คุณไม่สามารถส่งประชาสัมพันธ์จากสำเนาท้องถิ่นของคุณจนกว่าคุณจะประกาศให้เป็นผู้มีส่วนร่วม ฉันคุ้นเคยกับการส่ง PRs จาก repo ท้องถิ่นของฉัน แต่นั่นเป็นเพราะฉันทำเครื่องหมายว่าเป็นผู้มีส่วนร่วมเสมอ หากคุณคิดเกี่ยวกับเรื่องนี้การส่ง PR คุณต้องผลักสาขาไปยัง repo ระยะไกลแล้วสร้าง PR ฉันคิดว่ามันสมเหตุสมผลถ้าคุณไม่ต้องการให้คนสุ่มสร้างสาขาใน repo ของคุณ และคุณต้องการให้พวกเขาแยกแยะและส่ง PRs ด้วยวิธีนั้นแทน
Adam Zerner

ฉันเคยเห็นวิธีการทางไกล "ต้นน้ำ" ครั้งที่สองที่อื่น แต่ไม่ตรงไปกว่าที่จะดึงโดยตรงจาก "GitHub - Original" เป็น "GitHub - Fork" หรือไม่ วิธีระยะไกลที่สองดูเหมือนจะไม่ทำงานในการตั้งค่า Eclipse และ eGit ของฉันล้มเหลวในการผลักดันไปยัง repo "GitHub - Fork" ของฉัน (ไม่มีอะไรให้กด)
William T. Mallard

ไม่เป็นไรลิงก์ข้อมูลที่นี่ให้ข้อมูลเชิงลึกแก่ฉัน ในฐานะผู้มีส่วนร่วมจึงควรดึงจาก "GitHub - Original" เป็น "GitHub - Fork" จากนั้น "- Fork" ไปยังเครื่องจักรท้องถิ่น แต่ถ้าคุณเป็นเจ้าของคุณอาจต้องการดึงโดยตรงจาก "- Fork" ก่อนอื่นให้ตรวจสอบทำการทดสอบและอื่น ๆ ก่อนกด "- ดั้งเดิม"
William T. Mallard

135

ฉันได้ยินคนพูดว่าพวกเขากำลังใช้รหัสในระบบคอมไพล์ Git "fork" ฟังดูน่าสงสัยเหมือน git "clone" บวกกับความตั้งใจทางจิตใจ (ไร้ความหมาย) บางอย่างที่จะละทิ้งการรวมในอนาคต ไม่มีคำสั่ง fork ในคอมไพล์ใช่ไหม?

"Forking" เป็นแนวคิดไม่ใช่คำสั่งที่ได้รับการสนับสนุนเฉพาะจากระบบควบคุมเวอร์ชันใด ๆ

การฟอร์กแบบง่ายที่สุดนั้นมีความหมายเหมือนกันกับการแตกแขนง ทุกครั้งที่คุณสร้างสาขาโดยไม่คำนึงถึง VCS ของคุณคุณจะ "แยก" ส้อมเหล่านี้มักจะง่ายต่อการผสานกลับกัน

ชนิดของส้อมที่คุณกำลังพูดถึงซึ่งบุคคลอื่นใช้สำเนารหัสที่สมบูรณ์และเดินออกไปจำเป็นต้องเกิดขึ้นนอก VCS ในระบบรวมศูนย์เช่นการโค่นล้ม VCS แบบกระจายเช่น Git ได้รับการสนับสนุนที่ดีกว่าในการตีรหัสฐานทั้งหมดและเริ่มโครงการใหม่อย่างมีประสิทธิภาพ

Git (ไม่ใช่ GitHub) โดยพื้นฐานสนับสนุน "การฟอร์ก" repo ทั้งหมด (เช่นการโคลน) ในสองวิธี:

  • เมื่อคุณโคลนการเรียกระยะไกลoriginจะถูกสร้างขึ้นสำหรับคุณ
  • โดยค่าเริ่มต้นทุกสาขาในโคลนจะติดตามการoriginเทียบเท่า
  • การดึงและการรวมการเปลี่ยนแปลงจากโครงการดั้งเดิมที่คุณแยกจากนั้นง่ายนิดเดียว

Git ทำการเปลี่ยนแปลงที่มีส่วนร่วมกลับไปยังที่มาของทางแยกง่ายๆเพียงแค่ขอให้ใครบางคนจากโครงการต้นฉบับดึงออกมาจากคุณหรือร้องขอการเข้าถึงเพื่อเขียนเพื่อผลักดันการเปลี่ยนแปลงกลับมาเอง นี่คือส่วนที่ GitHub ทำให้ง่ายขึ้นและเป็นมาตรฐาน

มีความกังวลใด ๆ เกี่ยวกับ Github ที่ขยาย git ในทิศทางนี้หรือไม่? หรือข่าวลือใด ๆ ของคอมไพล์ดูดซับการทำงานหรือไม่

ไม่มีความทุกข์เพราะการสันนิษฐานของคุณผิด GitHub "ขยาย" ฟังก์ชั่นการฟอร์กของ Git ด้วย GUI ที่ดีและวิธีมาตรฐานในการออกคำขอแบบดึง แต่มันไม่ได้เพิ่มฟังก์ชันการทำงานให้กับ Git แนวคิดของการทำธุรกรรมซื้อคืนแบบเต็มรูปแบบถูกนำไปใช้ในการควบคุมเวอร์ชันแบบกระจายในระดับพื้นฐาน คุณสามารถละทิ้ง GitHub ณ จุดใดก็ได้และยังคงผลักดัน / ดึงโครงการที่คุณ "แยก"


6
ขอบคุณสำหรับคำตอบที่ยอดเยี่ยมของคุณ ฉันแค่ต้องการชี้แจงซึ่งหมายความว่านอกเหนือจากบริบทของ Github ที่ฉันสามารถโคลนนิ่งบางอย่างX projectบนเครื่อง หากฉันทำการเปลี่ยนแปลงในพื้นที่ของฉันและไม่มีสิทธิ์เข้าถึงเพื่อเขียนฉันจะส่งอีเมลถึงผู้เขียนโครงการเพื่อขอการดึง เขาจะทำให้เรียกว่าระยะไกลGideonซึ่งจะเป็น URL ไปยังโคลนท้องถิ่นของฉันและเขาสามารถดึงใช่มั้ย?
gideon

1
หากคุณต้องการมีส่วนร่วมในการเปลี่ยนแปลงโครงการคุณสามารถบันทึกลงในไฟล์เช่นใช้ git format-patch และแนบอีเมลไปยังผู้ที่มีสิทธิ์ในการเขียนหรือคุณสามารถรับโฮสติ้งของคุณเองผลักงานของคุณไปที่ และส่ง URL ในอีเมลเช่นใช้คำสั่ง git request-pull Repos บนเวิร์กสเตชันมักไม่สามารถเข้าถึงได้ทางอินเทอร์เน็ต
bdsl

แต่ใช่ถ้าเวิร์กสเตชันของคุณสามารถเข้าถึงได้ทางอินเทอร์เน็ตไปยังผู้สร้างโครงการคุณสามารถส่ง URL ไปยังพวกเขาและพวกเขาสามารถเพิ่มเป็นรีโมตและดึงจากมันได้
bdsl

1
Re: ทุกข์สิ่งเดียวสำหรับฉันคือไม่มีลิงก์หรือปุ่มคลิกเพื่อสร้างปุ่มมุมมองแบบดึงออกจากที่ของฉันที่ GitHub บอกคุณว่าคุณทำ 50 หลัง ตอนนี้ไม่มีบิ๊กกี้ที่ฉันรู้ว่าพวกเขากำลังใช้คำว่า "คำขอดึง" เพื่อรวมคำขอสำหรับดึงจากต้นน้ำถึงส้อม GitHub ของคุณ Git นั้นยาก
William T. Mallard

80

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

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


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

4
@Casey คุณสามารถส่งคำขอดึงผ่าน GitHub จาก GitHub เท่านั้นและคุณสามารถส่งคำขอดึง GitHub จากสาขาที่มีอยู่ใน GitHub เท่านั้น หากคุณไม่ใช่ผู้ทำงานร่วมกับ Repository ที่เป็นปัญหาคุณจะไม่สามารถสร้างสาขาที่คุณสามารถเริ่มต้นคำขอดึง GitHub ได้ ไม่มีอะไรที่ห้ามไม่ให้คุณทำเช่นนั้นผ่านอีเมลแบบเก่า แต่ GitHub ไม่ได้มีส่วนร่วม
Beau Simensen

2
@Casey เหตุผลก็คือโดยปกติแล้วคนอื่นจะไม่สามารถเข้าถึง URL ไปยังเวิร์กสเตชันของคุณได้ GitHub forkหมายความว่ามีสำเนาของการทำงานของคุณบนเซิร์ฟเวอร์ GitHub ที่คุณสามารถpushไปและที่คนอื่นทำไม่ได้มีการเข้าถึง URL pullเพื่อให้พวกเขาสามารถ วิธีpull requestนี้เป็นวิธีมาตรฐานในการรับ URL สำหรับสำเนาของคุณ (ขึ้นบน GitHub) ให้กับพวกเขาเพื่อให้พวกเขาสามารถดึงลงในที่เก็บได้อย่างง่ายดาย
Jesse Chisholm

นี่ควรเป็นคำตอบที่ถูกต้อง / เป็นที่ยอมรับฉันเชื่อ ลองนึกภาพความยุ่งเหยิงในฉากที่ทีมงานของนักพัฒนา 15-20 คนสร้างสาขาและผลักดันให้กำเนิดกับนักพัฒนา 15-20 คนที่มีสำเนาของที่เก็บเดียวกันและสร้างสาขาจำนวนมากและทำการเปลี่ยนแปลงและผลักดันมันกลับ จากนั้นผู้แต่งของที่เก็บต้นฉบับสามารถดึงการเปลี่ยนแปลงที่เขา / เธอต้องการเท่านั้น
Kishor Pawar

37

"Fork" ในบริบทนี้หมายถึง "สร้างสำเนาของรหัสเพื่อให้ฉันสามารถเพิ่มการแก้ไขของฉันเอง" ไม่มีอะไรจะพูดอีกแล้ว ทุก ๆ โคลนนั้นเป็นส้อมและขึ้นอยู่กับต้นฉบับเพื่อตัดสินใจว่าจะดึงการเปลี่ยนแปลงจากส้อมหรือไม่


2
โดยเฉพาะ: "ทำสำเนาของรหัสon the GitHub serverเพื่อให้ฉันสามารถเพิ่มการแก้ไขของฉันเองand others can have URL access to my version" เวิร์กสเตชันในพื้นที่ส่วนใหญ่ไม่ให้การเข้าถึง URL เพื่อให้ทุกคนสามารถดึงได้ แต่ถ้าคุณกดไปที่ทางแยกของคุณบนเซิร์ฟเวอร์พวกเขาสามารถมี URL สำหรับการดึง
Jesse Chisholm

คำถามไม่ได้เกี่ยวกับการฟอร์กโดยทั่วไป แต่เกี่ยวกับการฟอร์ก GitHub โดยเฉพาะ
reinierpost

26

การโคลนเกี่ยวข้องกับการทำสำเนาของที่เก็บ git ไปยังเครื่องโลคัลขณะที่การฟอร์กคือการโคลนที่เก็บลงในที่เก็บอื่น การโคลนนิ่งใช้สำหรับการใช้งานส่วนตัวเท่านั้น (แม้ว่าการรวมในอนาคตอาจเกิดขึ้นได้) แต่ด้วยการฟอร์กคุณกำลังคัดลอกและเปิดเส้นทางโครงการใหม่


11

การแยกจะทำเมื่อคุณตัดสินใจที่จะมีส่วนร่วมในโครงการ คุณจะทำสำเนาของโครงการทั้งหมดพร้อมกับบันทึกประวัติ สำเนานี้ทำขึ้นอย่างสมบูรณ์ในที่เก็บของคุณและเมื่อคุณทำการเปลี่ยนแปลงเหล่านี้คุณจะต้องส่งคำขอดึง ตอนนี้มันขึ้นอยู่กับเจ้าของแหล่งที่มาที่จะยอมรับคำขอดึงของคุณและรวมการเปลี่ยนแปลงในรหัสเดิม

Git clone เป็นคำสั่งจริงที่อนุญาตให้ผู้ใช้รับสำเนาของแหล่งที่มา git clone [URL] ควรสร้างสำเนาของ [URL] ในที่เก็บข้อมูลในเครื่องของคุณ


10

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


10

มีความเข้าใจผิดที่นี่เกี่ยวกับสิ่งที่ "ส้อม" คืออะไร ความจริงแล้ว fork คืออะไรไม่มีอะไรมากไปกว่าชุดของกิ่งไม้ต่อผู้ใช้ เมื่อคุณกดที่ส้อมคุณจะดันไปที่ที่เก็บจริงเพราะนั่นคือที่เก็บเท่านั้น

คุณสามารถลองใช้งานได้โดยการกดไปที่ทางแยกสังเกตการกระทำแล้วไปที่ที่เก็บต้นฉบับและใช้รหัสการกระทำคุณจะเห็นว่าการกระทำนั้นเป็น "ใน" ที่เก็บต้นฉบับ

มันทำให้รู้สึกมาก แต่มันก็ไกลจากที่เห็นได้ชัด (ฉันเพิ่งค้นพบสิ่งนี้โดยบังเอิญเมื่อเร็ว ๆ นี้)

เมื่อ John forks ที่เก็บ SuperProject สิ่งที่ดูเหมือนจะเกิดขึ้นจริงก็คือทุกสาขาใน repository นั้นจะถูกจำลองด้วยชื่อเช่น "John.master", "John.new_gui_project" เป็นต้น

GitHub "ซ่อน" "John" จากเราและทำให้เราเห็นภาพลวงตาว่าเรามี "สำเนา" ของที่เก็บใน GitHub แต่เราไม่ต้องการและไม่มีใครต้องการ

ดังนั้น "เจ้านาย" สาขาของส้อมของฉันจึงมีชื่อว่า "Korporal.master" แต่ GitHub UI ไม่เคยเปิดเผยสิ่งนี้แสดงให้ฉันเห็นเพียง "เจ้านาย"

นี่คือสิ่งที่ฉันคิดว่าน่าจะอยู่ภายใต้ฝากระโปรงอย่างไรก็ตามสิ่งที่ฉันทำเมื่อไม่นานมานี้และเมื่อคุณไตร่ตรองมันก็เป็นการออกแบบที่ดีมาก

ด้วยเหตุนี้ฉันคิดว่ามันจะง่ายมากสำหรับ Microsoft ที่จะใช้ Git forks ในการให้บริการ Visual Studio Team Services


เรียนคุณ Hugh ครึ่งหนึ่งของการตอบกลับของคุณไม่ถูกต้องจริง ๆ - fork คือการโคลนของพื้นที่เก็บข้อมูลทั้งหมดจากบัญชีผู้ใช้หนึ่งไปยังบัญชีผู้ใช้อื่นพร้อมกับสาขาและประวัติทั้งหมด เมื่อคุณส่งมอบให้กับ fork ไม่มีอะไรเปลี่ยนแปลงในที่เก็บต้นฉบับที่คุณแยกไว้ แต่นอกเหนือจากความเข้าใจผิดบางส่วนในส่วนของคุณเกี่ยวกับสิ่งที่ "ส้อม" คือตอนนี้มีข่าวดี: บริการทีม Visual Studio รวมถึงตอนนี้ฟังก์ชั่น "แยก" ;)
Sorin Postelnicu

1
@SorinPostelnicu แหล่งที่มา? ฉันอยากจะเชื่อว่าฮิวจ์ที่นี่เนื่องจากประสบการณ์ส่วนตัวของส้อมทำงานในลักษณะที่ไม่แน่นอนกับพวกเขาเป็นโคลนที่เรียบง่ายของพื้นที่เก็บข้อมูล ตัวอย่างเช่นเมื่อลบอัปสตรีมส้อมจะถูกลบ (ดังที่ได้กล่าวไว้ในความคิดเห็นเกี่ยวกับคำถามของ OP) และบางครั้งอัปสตรีมมีการรวมสิ่งต่าง ๆ เข้าด้วยกันเป็นสาขาของส้อมของฉันเมื่อยอมรับคำขอดึงโดยไม่ต้องทำอะไรเลย
มันฝรั่ง

แน่นอนว่านี่เป็นกรณี ท้ายที่สุดแล้วมันคงโง่อย่างไม่น่าเชื่อสำหรับ GitHub ที่จะgit cloneเป็นพื้นที่เก็บข้อมูลใหม่ทั้งหมด (แม้กระทั่ง "เปลือย") ทุกครั้งที่มีคนกดปุ่ม "ส้อม" ซึ่งจะเป็นการสูญเสียพื้นที่เก็บข้อมูลอย่างไม่น่าเชื่อ .
Greg A. Woods

7

นอกเหนือจากข้อเท็จจริงที่ว่าการโคลนนิ่งมาจากเซิร์ฟเวอร์ไปยังเครื่องของคุณและการฟอร์กกิ้งทำสำเนาบนเซิร์ฟเวอร์นั้นมีความแตกต่างที่สำคัญคือเมื่อเราทำการโคลนนิ่งเราจะได้รับสาขาป้ายกำกับและอื่น ๆ ทั้งหมด

แต่เมื่อเราแยกเราจะได้รับไฟล์ปัจจุบันในสาขาหลักเท่านั้นไม่มีอะไรอื่นนอกจากนั้น นี่หมายความว่าเราไม่ได้สาขาอื่น ๆ ฯลฯ

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

Fork ไม่ใช่คำสั่งใน Git; มันเป็นเพียงแนวคิดที่ GitHub ดำเนินการ จำไว้ว่า Git ได้รับการออกแบบให้ทำงานในสภาพแวดล้อมแบบเพียร์ทูเพียร์โดยไม่จำเป็นต้องซิงโครไนซ์ข้อมูลกับสำเนาหลัก เซิร์ฟเวอร์เป็นเพียงเพียร์อื่น แต่เรามองว่าเป็นสำเนาหลัก


7
ฮะ? ส้อมได้รับทุกสาขา แต่คุณต้องรู้จักที่จะมอง (คำใบ้: git branch -a)
tripleee

3

ในแง่ที่ง่ายที่สุด

เมื่อคุณบอกว่าคุณมีการฟอร์กพื้นที่เก็บข้อมูลคุณมีพื้นการสร้างสำเนาของพื้นที่เก็บข้อมูลเดิมภายใต้ GitHub ID ของคุณในบัญชีของคุณ GitHub

และ

เมื่อคุณบอกว่าคุณกำลังโคลนที่เก็บคุณกำลังสร้างสำเนาของที่เก็บต้นฉบับในระบบของคุณ (PC / แล็ปท็อป) โดยตรงโดยไม่ต้องมีการคัดลอกในบัญชี GitHub ของคุณ

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