ความแตกต่างระหว่าง git clone และ checkout คืออะไร?


คำตอบ:


337

หน้าคนสำหรับเช็คเอาต์: http://git-scm.com/docs/git-checkout

หน้า man สำหรับ clone: http://git-scm.com/docs/git-clone

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

หมายเหตุ: สำหรับผู้ที่มี SVN / CVS พื้นหลังและใหม่เพื่อ Git ที่เทียบเท่าgit cloneใน SVN / CVS checkoutคือ ถ้อยคำเดียวกันของคำที่แตกต่างกันมักจะสับสน


41
checkoutสามารถนำไปใช้กับสิ่งอื่น ๆ เช่นการเขียนทับไฟล์ของคุณในสำเนาการทำงานของคุณด้วยเวอร์ชันของไฟล์นั้นจากการแก้ไขอื่น
svick

8
และเมื่อใดที่คุณจะใช้ "pull" vs "checkout"?
Kokodoko

27
pull คือการดึงข้อมูลและการผสานการชำระเงินเป็นการดำเนินงานในท้องถิ่นที่ทำงานกับข้อมูลที่ดึงข้อมูลมาแล้วเท่านั้น ดังนั้นจึงไม่เหมือนการชำระเงิน svn เลย
สิงหาคม Lilleaas

13
มาจากโลก SVN ฉันก็สับสนเช่นกัน ว้าว .. สิ่งที่ไม่เป็นระเบียบ ในโลกอุดมคติฉันจะบังคับให้ผู้ผลิตระบบควบคุมแหล่งข้อมูลทุกรายใช้ข้อกำหนดเดียวกัน
ZoltánTamási

5
Fork เป็นคำที่ github และไม่เกี่ยวข้องกับคอมไพล์เอง
August Lilleaas

123

git cloneคือการดึงที่เก็บของคุณจากเซิร์ฟเวอร์ git ระยะไกล

git checkoutคือการเช็คเอาท์สถานะที่คุณต้องการใน repository ของคุณ (เช่น branch หรือไฟล์เฉพาะ)

เช่นปัจจุบันคุณอยู่ในสาขาหลักและคุณต้องการเปลี่ยนเป็นสาขาพัฒนา

git checkout develop_branch

เช่นคุณต้องการชำระเงินให้กับสถานะของไฟล์เฉพาะ

git checkout commit_point_A -- <filename>

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


20
"จากเซิร์ฟเวอร์ git ระยะไกล" - ไม่จำเป็นต้องให้เซิร์ฟเวอร์เป็นรีโมท git cloneจะทำงานร่วมกับ repos ท้องถิ่น
ตลาดหลักทรัพย์

1
ขอบคุณสำหรับลิงค์ไปยังการอ้างอิงภาพเพื่อคอมไพล์!
David Pointer

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

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

11

สิ่งหนึ่งที่ควรสังเกตคือการขาด "คัดลอก" ภายใน git นั่นเป็นเพราะคุณมีสำเนาเต็มใน repo ท้องถิ่นของคุณ - repo ท้องถิ่นของคุณเป็นcloneของ repo upstream ที่คุณเลือก ดังนั้นคุณจึงมีความเป็นส่วนตัวcheckoutของทุกอย่างได้อย่างมีประสิทธิภาพโดยไม่ต้องใส่ 'ล็อค' ลงในไฟล์เหล่านั้นใน repo อ้างอิง

Git ให้ค่าแฮช SHA1 เป็นกลไกในการตรวจสอบว่าสำเนาที่คุณมีในไฟล์ / ไดเรกทอรีต้นไม้ / การกระทำ / repo เหมือนกับที่ใช้โดยผู้ที่สามารถประกาศสิ่งต่าง ๆ ในฐานะ "Master" ภายในลำดับชั้นของความไว้วางใจ นี่เป็นการหลีกเลี่ยงการ 'ล็อก' ทั้งหมดที่ทำให้ระบบ SCM ส่วนใหญ่สำลัก (ด้วยปัญหาปกติของสำเนาส่วนตัวการรวมขนาดใหญ่และไม่มีการควบคุมหรือการจัดการซอร์สโค้ดจริง ;-)!


4
คำถามไม่ได้กล่าวถึงการล็อคและควรสันนิษฐานโดยค่าเริ่มต้นในวันนี้ว่าคนไม่คุ้นเคยกับแนวคิดนี้ดังนั้นความแตกต่างเหล่านี้จาก VCSes แบบเก่าควรอธิบายได้ก็ต่อเมื่อมีการถามอย่างชัดเจน
wRAR

6

ชำระเงินคอมไพล์ได้ 2 ครั้ง

  1. สลับไปมาระหว่างสาขาท้องถิ่นที่มีอยู่เช่น git checkout <existing_local_branch_name>
  2. สร้างสาขาใหม่จากสาขาปัจจุบันโดยใช้แฟล็ก -b สมมติว่าคุณอยู่ที่สาขาหลักแล้วgit checkout -b <new_feature_branch_name>จะสร้างสาขาใหม่ที่มีเนื้อหาของต้นแบบและเปลี่ยนเป็นสาขาที่สร้างขึ้นใหม่

คุณสามารถค้นหาตัวเลือกเพิ่มเติมได้ที่เว็บไซต์ทางการ


ดี นี้-bเป็นตัวเลือกที่น่ากลัวซึ่งจะสร้างสาขาใหม่และการตรวจสอบมันออกมาได้เป็นอย่างดีในเวลาเดียวกันในคำสั่งเดียว รักมัน!
RBT

2

checkout สามารถใช้ได้หลายกรณี:

ตัวพิมพ์ที่หนึ่ง : สลับระหว่างสาขาในที่เก็บภายในตัวอย่างเช่น: git checkout exists_branch_to_switch

นอกจากนี้คุณยังสามารถสร้างสาขาใหม่และสลับในกรณีนี้ด้วย -b

git checkout -b new_branch_to_switch

กรณีที่สอง : กู้คืนไฟล์จาก x rev

git checkout rev file_to_restore ...

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