ความแตกต่างที่ใหญ่ที่สุดคือวิธีการบันทึกชื่อสาขาในประวัติศาสตร์ ด้วยสาขาที่ตั้งชื่อแล้วชื่อสาขาจะฝังอยู่ในชุดการเปลี่ยนแปลงแต่ละชุดและจะกลายเป็นส่วนที่ไม่เปลี่ยนรูปของประวัติศาสตร์ ด้วยการโคลนจะไม่มีการบันทึกถาวรว่าชุดการเปลี่ยนแปลงใดมาจากไหน
ซึ่งหมายความว่าการโคลนเหมาะอย่างยิ่งสำหรับการทดลองอย่างรวดเร็วที่คุณไม่ต้องการบันทึกชื่อสาขาและสาขาที่ตั้งชื่อนั้นเหมาะสำหรับสาขาในระยะยาว ("1.x", "2.x" และที่คล้ายกัน)
โปรดทราบว่าที่เก็บเดียวสามารถรองรับสาขาน้ำหนักเบาหลาย ๆ สาขาใน Mercurial ได้อย่างง่ายดาย คุณสามารถบุ๊กมาร์กสาขาในที่เก็บดังกล่าวเพื่อให้คุณสามารถค้นหาอีกครั้งได้อย่างง่ายดาย สมมติว่าคุณได้โคลนที่เก็บข้อมูลของ บริษัท เมื่อมีลักษณะดังนี้:
[a] --- [b]
คุณแฮ็คและสร้าง[x]
และ[y]
:
[a] --- [b] --- [x] --- [y]
หมายถึงในขณะที่มีคนใส่[c]
และ[d]
ลงในที่เก็บดังนั้นเมื่อคุณดึงคุณจะได้รับกราฟประวัติเช่นนี้:
[x] --- [y]
/
[เอบีซีดี]
ที่นี่มีสองหัวในที่เก็บเดียว สำเนาการทำงานของคุณจะแสดงชุดการเปลี่ยนแปลงเดียวเสมอซึ่งเรียกว่าชุดการเปลี่ยนแปลงหลักสำเนาการทำงาน ตรวจสอบสิ่งนี้ด้วย:
% hg parents
[y]
พูดเถอะว่ามันรายงาน คุณสามารถเห็นหัวด้วย
% hg heads
และจะรายงานและ[y]
[d]
หากคุณต้องการอัปเดตที่เก็บของคุณเป็นแบบชำระเงินทั้งหมด[d]
ให้ทำ (แทนที่[d]
ด้วยหมายเลขการแก้ไขสำหรับ[d]
):
% hg update --clean [d]
จากนั้นคุณจะเห็นhg parents
รายงาน[d]
นั้น ซึ่งหมายความว่าการกระทำต่อไปของคุณจะมี[d]
ในฐานะผู้ปกครอง คุณสามารถแก้ไขข้อบกพร่องที่คุณสังเกตเห็นในสาขาหลักและสร้างชุดการเปลี่ยนแปลง[e]
:
[x] --- [y]
/
[a] --- [b] --- [c] --- [d] --- [e]
ในการพุชชุดการเปลี่ยนแปลง[e]
เท่านั้นคุณต้องทำ
% hg push -r [e]
ที่[e]
เป็นกัญชาเซ็ตการแก้ไข โดยค่าเริ่มต้นhg push
ก็จะเปรียบเทียบที่เก็บและเห็นว่า[x]
, [y]
และ[e]
จะหายไป แต่คุณอาจไม่ต้องการที่จะใช้ร่วมกัน[x]
และ[y]
ยัง
หากการแก้ไขข้อบกพร่องส่งผลกระทบต่อคุณด้วยคุณต้องการรวมเข้ากับสาขาคุณลักษณะของคุณ:
% hg update [y]
% hg merge
ซึ่งจะทำให้กราฟที่เก็บของคุณมีลักษณะเช่นนี้:
[x] --- [y] ----------- [z]
/ /
[a] --- [b] --- [c] --- [d] --- [e]
ที่[z]
เป็นการผสานระหว่างและ[y]
[e]
คุณสามารถเลือกที่จะทิ้งสาขาไปได้:
% hg strip [x]
ประเด็นหลักของเรื่องนี้คือโคลนตัวเดียวสามารถแสดงถึงการพัฒนาหลาย ๆ ด้านได้อย่างง่ายดาย สิ่งนี้เป็นจริงเสมอสำหรับ "hg ธรรมดา" โดยไม่ต้องใช้ส่วนขยายใด ๆ แม้ว่าส่วนขยายบุ๊กมาร์กเป็นตัวช่วยที่ดี จะช่วยให้คุณกำหนดชื่อ (บุ๊กมาร์ก) ให้กับชุดการเปลี่ยนแปลง ในกรณีข้างต้นคุณจะต้องมีบุ๊กมาร์กบนส่วนหัวการพัฒนาของคุณและอีกอันอยู่บนส่วนหัวอัปสตรีม สามารถผลักและดึงบุ๊กมาร์กได้ด้วย Mercurial 1.6 และกลายเป็นคุณสมบัติในตัวของ Mercurial 1.8
หากคุณเลือกที่จะสร้างสองโคลนโคลนการพัฒนาของคุณจะมีลักษณะเช่นนี้หลังจากสร้าง[x]
และ[y]
:
[a] --- [b] --- [x] --- [y]
และโคลนต้นน้ำของคุณจะประกอบด้วย:
[a] --- [b] --- [c] --- [d]
ตอนนี้คุณสังเกตเห็นจุดบกพร่องและแก้ไข ที่นี่คุณไม่จำเป็นต้องทำhg update
ตั้งแต่โคลนต้นน้ำพร้อมใช้งาน คุณกระทำและสร้าง[e]
:
[a] --- [b] --- [c] --- [d] --- [e]
หากต้องการรวม bugfix ไว้ในโคลนการพัฒนาของคุณคุณจะดึงมันเข้าไปที่นั่น:
[a] --- [b] --- [x] --- [y]
\
[c] --- [d] --- [e]
และรวม:
[a] --- [b] --- [x] --- [y] --- [z]
\ /
[c] --- [d] --- [e]
กราฟอาจดูแตกต่างกัน แต่มีโครงสร้างเหมือนกันและผลลัพธ์สุดท้ายก็เหมือนกัน การใช้โคลนคุณต้องทำบัญชีทางจิตน้อยลงเล็กน้อย
สาขาที่มีชื่อไม่ได้เข้ามาในภาพที่นี่เพราะเป็นทางเลือกค่อนข้างมาก Mercurial ได้รับการพัฒนาโดยใช้โคลนสองตัวเป็นเวลาหลายปีก่อนที่เราจะเปลี่ยนมาใช้กิ่งไม้ที่มีชื่อ เรารักษาสาขาที่เรียกว่า 'เสถียร' ไว้นอกเหนือจากสาขา 'ค่าเริ่มต้น' และทำการเผยแพร่ตามสาขา 'เสถียร' ดูหน้าการแตกแขนงมาตรฐานในวิกิสำหรับคำอธิบายของเวิร์กโฟลว์ที่แนะนำ