คำเหล่านี้หมายความว่าอย่างไรใน Git: Repository, fork, branch, clone, track


130

ฉันไม่ชัดเจนเกี่ยวกับความหมายที่นี่ ทั้งหมดนี้เกี่ยวกับสำเนา / ตัวแปรของหน่วยรหัส + ประวัติ แต่ที่ผ่านมาฉันไม่แน่ใจว่าจะพูดได้ โครงสร้างตรรกะนี้มีการอธิบายอยู่ที่ไหนสักแห่งหรือไม่?


5
ฉันอยากจะแนะนำให้อ่านบทคู่แรกของหนังสือ Pro Git ( progit.org/book )
ewall

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

14
หวังว่าฉันจะสามารถ +1 ความคิดเห็นของ Daniel ได้มากขึ้น ในขณะที่ความหมายของคำศัพท์บางคำ (เช่นที่เก็บข้อมูล) ควรชัดเจน แต่ความสัมพันธ์ของคำเหล่านั้นก็ไม่ได้เสมอไป (branch กับ fork) และความหมายที่แท้จริงนั้นตีความผิดได้ง่ายโดยคนที่ใช้ VCS แบบรวมศูนย์ นอกจากนี้ให้ดูที่ "สาขาคืออะไร" ของ Pro Git ส่วน - ผู้ใช้ขั้นพื้นฐานต้องการทราบเกี่ยวกับต้นไม้และต้นไม้หรือไม่หรือต้องการทราบในเชิงคุณภาพว่าสาขาคืออะไร
Cascabel

1
@DanielStutzbach สามารถส่งความคิดเห็นเกี่ยวกับสิ่งที่ไม่ชัดเจนในหนังสือได้ (ฉันไม่รู้คำศัพท์ที่ถูกต้องที่จะพูดอย่างนั้น) ฉันได้ทำเช่นนั้นฉันได้กล่าวว่าหนังสือเล่มนี้ต้องการกำหนดว่าที่เก็บคืออะไร ฉันยอมรับว่ามันค่อนข้างยากที่จะได้รับเนื้อหาเชิงแนวคิดจากคนที่เข้าใจบางสิ่งเป็นอย่างดี หนังสือเล่มนั้น (ปัจจุบัน) พูดถึงฐานข้อมูลโดยไม่ได้กำหนดสิ่งที่อยู่ในบริบทนี้และไม่ได้บอกว่าไม่มีที่เก็บอะไร
user34660

คำตอบ:


146

ที่เก็บเป็นเพียงที่เก็บประวัติผลงานของคุณ มักจะอยู่ใน.gitไดเรกทอรีย่อยของสำเนาการทำงานของคุณซึ่งเป็นสำเนาของสถานะล่าสุดของไฟล์ที่คุณกำลังทำงานอยู่

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

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

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

มีหนังสือ git ดีๆมากมายทางออนไลน์ ดูProGitและGit Magicเพื่อเริ่มต้นใช้งานตลอดจนบทแนะนำอย่างเป็นทางการและหนังสือชุมชน


แน่นอนว่าการอ่านคู่มือและแบบฝึกหัด F เป็นพื้นฐาน แต่นี่เป็นบทสรุปที่ดีสำหรับฉัน ชื่นชมมาก!
brasofilo

โปรดทราบว่าคุณสามารถเปลี่ยนไดเร็กทอรีการทำงานในเครื่องของคุณไปยังสาขาใหม่ได้ ("git checkout <new_branch>") ในกรณีนี้ไฟล์ของไดเร็กทอรีการทำงานในเครื่องของคุณจะถูกแทนที่ด้วยเนื้อหาของสาขาที่คุณกำลังเปลี่ยนไป แต่คุณจะไม่สูญเสียงานของคุณ: Git จะจัดเก็บการเปลี่ยนแปลงที่ได้รับมอบหมายทั้งหมด ("คอมมิต") ที่คุณทำในสาขาก่อนหน้าใน "ฐานข้อมูล" ของ Git (โฟลเดอร์. git ที่ซ่อนอยู่) และจะให้คุณเปลี่ยนกลับไฟล์ของคุณได้
KrisWebDev

3
ฉันคิดว่าต้องมีการกล่าวถึงเป็นพิเศษว่าในอดีตไม่ว่าคุณจะใช้ VCS ใดก็ตามการแยกและการแตกแขนงถือเป็นสองสิ่งที่แยกจากกัน การแยกสาขาถือเป็นข้อตกลงที่ดีและโดยนัยระหว่างนักพัฒนา Forking มีความจริงจังมากขึ้นเนื่องจากส่อว่านักพัฒนาที่ทำงานในโครงการไม่เห็นด้วยกับบางสิ่งและตัดสินใจแยกทาง โดยทั่วไปแล้วส้อมที่ประสบความสำเร็จจะถูกรวมกลับเป็นโครงการเดียวในภายหลังหลังจากทั้งสองฝ่ายได้ข้อตกลง ตั้งแต่นั้นเป็นต้นมา Git (และ GitHub) ได้เบลอคำศัพท์เหล่านี้และทั้งสองคำก็แสดงถึงแนวคิดเดียวกัน แต่ในรูปแบบที่แตกต่างกัน
redteam316

ที่เก็บจึงไม่มีไฟล์สำหรับโครงการอยู่ในนั้น? คุณบอกว่าสถานที่ที่ประวัติศาสตร์ของการทำงานของคุณจะถูกเก็บไว้ แค่นี้เหรอ? แค่ประวัติของไฟล์ แต่ไม่ใช่ไฟล์เอง?
user34660

13

ฉันจะตอบคำถามของตัวเองด้วย RTFM

แต่อ่านนี้คู่มือที่ดี ตามที่ผู้เขียนกล่าวไว้:

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

“ ครึ่งหนึ่งของทรัพยากรที่มีอยู่ใน Git น่าเสียดายที่ใช้แนวทางนั้น: พวกเขาจะแนะนำคุณว่าจะเรียกใช้คำสั่งใดเมื่อใดและคาดว่าคุณจะทำได้ดีหากคุณเพียงแค่เลียนแบบคำสั่งเหล่านั้น อีกครึ่งหนึ่งเป็นไปตามแนวคิดทั้งหมด แต่จากที่ฉันได้เห็นพวกเขาอธิบาย Git ในลักษณะที่ถือว่าคุณเข้าใจแล้วว่า Git ทำงานอย่างไร”


แนะนำนี้ดูเหมือนว่าจะได้รับการย้ายไปsbf5.com/~cduan/technical/git URL เดิมยังคงใช้งานได้ในตอนนี้
Eric Anderson

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

3

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

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

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