ทำไมผู้ใช้ Git ถึงบอกว่าการโค่นล้มไม่มีซอร์สโค้ดทั้งหมดในเครื่อง?


23

ฉันแค่ทำตามที่ฉันอ่านดังนั้นยกโทษให้ฉัน แต่ทั้งหมดที่ฉันอ่านบอกว่าข้อดีอย่างหนึ่งที่สำคัญของ Git over Subversion คือ Git มอบโค้ดต้นฉบับทั้งหมดให้กับนักพัฒนาในพื้นที่โดยไม่ต้องทำอะไรเลย เซิฟเวอร์.

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

ฉันไม่เข้าใจ. ฉันไม่ได้ขอให้มีการรีบาวด์หนึ่งกับอีกอันหนึ่งยกเว้นจุดนี้


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

คำตอบ:


69

หลักฐานที่คุณตั้งคำถามนั้นผิดจริง:

ข้อได้เปรียบที่สำคัญอย่างหนึ่งของ Git over การโค่นล้มคือ Git ให้ซอร์สโค้ดทั้งหมดแก่ผู้พัฒนาในพื้นที่

ด้วยการโค่นล้มและ Git คุณมีซอร์สโค้ดของคุณอยู่ในเครื่อง ด้วย Git คุณมีทั้งซอร์สโค้ดและที่เก็บของคุณบนเครื่องโลคอลของคุณ

มันเป็นอะไรแบบนี้

โค่นล้ม:

รหัสของคุณ <-> พื้นที่เก็บข้อมูล

Git:

รหัสของคุณ <-> ที่เก็บในเครื่องของคุณ <-> ที่เก็บระยะไกล (... <-> repo ระยะไกลอื่นและอื่น ๆ )

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

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

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


10
นี่เป็นคำตอบที่ดีมากและกลับมาบ้านด้วย "... เสี่ยงทำลายการสร้างเพื่อคนอื่นหรือประสบกับการพัฒนาในท้องถิ่นเป็นเวลานานโดยไม่มีการควบคุมจากแหล่งอื่น ... "
Charles Sprayberry

1
@cspray: ขอบคุณ! ฉันแน่ใจว่ามีประโยชน์อื่นเช่นกัน แต่นั่นคือความเจ็บปวดที่ยิ่งใหญ่ที่สุดที่ฉันมีกับ Svn
Goran Jovic

git FTW (อีก 8 ไป ... )
เทรเวอร์บอยด์สมิ ธ

2
@DanNeely: จริงแล้วมันทำ - OP ถามเกี่ยวกับการเรียกร้องที่เขาอ่านที่ไหนสักแห่งและคำตอบก็คือมันไม่เป็นความจริง (ดูส่วนแรกของคำตอบของฉัน) ส่วนที่สองเป็นเพียงคำอธิบายว่าใครก็ตามที่ทำข้อเรียกร้องอาจต้องการพูดและเหตุผล
Goran Jovic

1
@Giorgio: ลองแล้วคุณจะรู้ว่า :) อย่างจริงจังฉันไม่คิดว่าฉันเคยทำอย่างนั้นได้โดยไม่มีปัญหา (นอกเหนือจากการผสานด้วยตนเองอย่างสมบูรณ์ซึ่งเอาชนะจุดประสงค์ของเครื่องมือ)
Goran Jovic

17

Git หรือ Mercurial เก็บที่เก็บข้อมูลทั้งหมดของคุณไว้ในเครื่องพร้อมกับการแก้ไขทั้งหมดและตั้งชื่อสาขา การโค่นล้มเพียงร้านเดียว - โดยปกติ Head Revision ดังนั้นด้วย Git และ Mercurial คุณสามารถเข้าถึงที่เก็บข้อมูลแบบเต็ม (เช่นซอร์สโค้ดปัจจุบันและประวัติของมัน) แม้ว่าเครือข่ายของคุณจะหยุดทำงานกับ SVN คุณจะถูก จำกัด การแก้ไขล่าสุดที่คุณอัปเดต


1
@Murph ขอบคุณ นั่นคือสิ่งที่ฉันหมายถึง ฉันพยายามชี้แจง
Amenti

ไม่ใช่แค่คำถามว่าคุณมีการเชื่อมต่อเครือข่ายกับเซิร์ฟเวอร์หรือไม่ local IO เร็วกว่าและ latency ต่ำกว่าเครือข่าย IO ซึ่งทำให้การตรวจสอบประวัติหรือโทษไฟล์เร็วกว่ามาก (TrotiseSVN ตำหนิคำเตือน "โปรดรอสักครู่อาจใช้เวลาหลายนาทีอย่างจริงจัง!") ข้อเสียคือการมีประวัติภายในเครื่องทั้งหมดอาจต้องใช้พื้นที่ดิสก์มากขึ้นในที่เก็บขนาดใหญ่ นี่อาจเป็นปัญหาสำหรับแล็ปท็อปหากคุณไม่สามารถเพิ่มไดรฟ์พิเศษเพื่อเสริม SSD ที่ไม่ได้มีขนาดเล็กลงได้
Dan Neely

@ ความคิดเห็นของ DanNeely นั้นอาจสมเหตุสมผลในปี 2012 แต่ 4 ปีต่อมามันแทบจะเป็นไปไม่ได้เลยที่จะหาโครงการ git ที่สามารถครอบครองส่วนที่มีขนาดใหญ่ของ SSD ได้
Igor Stoppa

7

คำตอบสั้น ๆ คือ: เมื่อมีคอมไพล์คุณมีซอร์สโค้ดทั้งหมดพร้อมกับการโค่นล้มคุณมีซอร์สโค้ดเวอร์ชันล่าสุดทั้งหมดของคุณ

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


2

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

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

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


1

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

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

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