ในการโค่นล้ม (และ CVS) ที่เก็บเป็นอันดับแรกและสำคัญที่สุด ใน git และ mercurial ไม่มีแนวคิดของพื้นที่เก็บข้อมูลในลักษณะเดียวกัน การเปลี่ยนแปลงที่นี่เป็นธีมหลัก
+1
ความยุ่งยากใน CVS / SVN มาจากการที่ระบบเหล่านี้ไม่
จดจำความเป็นพ่อแม่ของการเปลี่ยนแปลง ใน Git และ Mercurial ไม่เพียง แต่สามารถมีลูกหลายคนได้ แต่ยังสามารถมีพ่อแม่หลายคนได้อีกด้วย!
ซึ่งสามารถสังเกตได้ง่ายโดยใช้เครื่องมือกราฟิกอย่างใดอย่างหนึ่งgitk
หรือhg
view
. ในตัวอย่างต่อไปนี้สาขา # 2 ถูกแยกจาก # 1 ที่คอมมิต A และตั้งแต่นั้นมารวมกันหนึ่งครั้ง (ที่ M รวมกับคอมมิต B):
o---A---o---B---o---C (branch #1)
\ \
o---o---M---X---? (branch #2)
หมายเหตุวิธี A และ B มีลูกสองคนในขณะที่ M มีสองพ่อแม่ ความสัมพันธ์เหล่านี้ถูกบันทึกไว้ในที่เก็บ สมมติว่าผู้ดูแลสาขา # 2 ตอนนี้ต้องการผสานการเปลี่ยนแปลงล่าสุดจาก branch # 1 พวกเขาสามารถออกคำสั่งเช่น:
$ git merge branch-1
และเครื่องมือจะรู้โดยอัตโนมัติว่าฐานคือ B - เนื่องจากถูกบันทึกในการกระทำ M ซึ่งเป็นบรรพบุรุษของส่วนปลายของ # 2 - และต้องรวมสิ่งที่เกิดขึ้นระหว่าง B และ C CVS จะไม่บันทึกข้อมูลนี้ และ SVN ก่อนหน้าเวอร์ชัน 1.5 ในระบบเหล่านี้กราฟจะมีลักษณะดังนี้:
o---A---o---B---o---C (branch #1)
\
o---o---M---X---? (branch #2)
โดยที่ M เป็นเพียงการกระทำ "บีบ" ขนาดมหึมาของทุกสิ่งที่เกิดขึ้นระหว่าง A และ B โดยนำไปใช้ที่ด้านบนของ M โปรดทราบว่าหลังจากเสร็จสิ้นการกระทำจะไม่มีร่องรอยเหลืออยู่ (ยกเว้นในความคิดเห็นที่มนุษย์อ่านได้) ซึ่ง M ไม่ได้มีต้นกำเนิดมาจากและจำนวนความผิดที่ถูกยุบเข้าด้วยกันทำให้ประวัติศาสตร์ไม่สามารถยอมรับได้
เลวยังดำเนินการผสานสองจะกลายเป็นฝันร้าย: หนึ่งจะต้องคิดออกว่าฐานผสานเป็นช่วงเวลาของการผสานแรก (และหนึ่งมีที่จะทราบ
ว่าได้มีการผสานในสถานที่แรก!) แล้วในปัจจุบันว่า ข้อมูลไปยังเครื่องมือเพื่อที่จะไม่พยายามเล่น A..B ซ้ำบน M ทั้งหมดนี้เป็นเรื่องยากพอสมควรเมื่อทำงานร่วมกันอย่างใกล้ชิด แต่เป็นไปไม่ได้เลยในสภาพแวดล้อมแบบกระจาย
ปัญหา (ที่เกี่ยวข้อง) คือไม่มีวิธีตอบคำถาม: "X มี B หรือไม่" โดยที่ B คือการแก้ไขข้อบกพร่องที่สำคัญ ดังนั้นทำไมไม่เพียงแค่บันทึกข้อมูลนั้นในการกระทำเนื่องจากเป็นที่รู้กันในเวลารวม!
ป. - ศ. - ฉันไม่มีประสบการณ์กับความสามารถในการบันทึกแบบผสาน SVN 1.5+ แต่ดูเหมือนว่าเวิร์กโฟลว์จะได้รับการออกแบบมากกว่าในระบบกระจาย หากเป็นเช่นนั้นจริง ๆ อาจเป็นเพราะ - ดังที่กล่าวไว้ในความคิดเห็นข้างต้น - การมุ่งเน้นไปที่องค์กรที่เก็บข้อมูลแทนที่จะเป็นการเปลี่ยนแปลงเอง