กิ่ง
hg branch
hg branches
คำว่า กิ่ง (branch) หมายความถึง "ประวัติการแก้ไขที่แยกออกไปในทิศทางที่ต่างกัน" โดย "ทิศทางการแก้ไข" ใน Mercurial นั้นหมายถึงเซ็ตแก้ไขที่ต่อเนื่องกันตามลำดับ
การรวมประวัติการแก้ไขที่ไม่ได้ต่อเนื่องกันนั้นเรียกว่าการรวมประวััติการแก้ไข
Contents
การสร้างกิ่ง
กิ่งจะถูกสร้างเมื่อเกิดการคอมมิทเซ็ตการแก้ไขใน repository หรือโดยการคอมมิทการแก้ไขใน repository อื่นๆที่เกี่ยวข้องกัน ความหมายของ repository สองอันที่เกี่ยวข้องกันก็คือ repository ทั้งสองนั้นทำสำเนามาจาก repository เดียวกัน แต่หลังจากการทำสำเนาเกิดการแก้ไขต่างๆที่ไม่เหมือนกัน
ในทางกลับกัน การรวมกิ่ง — หรือขั้นตอนต่างๆที่เกิดขึ้นจากการรวมประวัติการแก้ไขที่แยกออกไปในทิศทางที่ต่างกัน — สามารถเกิดขึ้นได้ใน repository เดียวเท่านั้น ถ้าคุณต้องการรวมกิ่งที่อยู่ใน repository ที่เกี่ยวข้อง ก่อนอื่นคุณจะต้องดึงประวัติการแก้ไขส่วนยอดของ repository นั้นๆเข้ามาใน repository เสียก่อน จากนั้นจึงทำการรวมประวัติ
1. Repository เดี่ยว
กิ่งใหม่จะถูกสร้างเมื่อคุณสร้างเซ็ตการแก้ไขใหม่ (C2) ใน repository (R0) ถ้า เซ็ตการแก้ไขบรรพบุรุษ (P) มีเซ็ตการแก้ไขลูกอยู่แล้ว (C1) การสร้าง C2 ทำให้ P มีเซ็ตการแก้ไขลูกเพิ่มขึ้นอีกหนึ่งอัน และก็เพิ่มยอดของ repository เช่นกัน
2. Repository สองอัน
กิ่งอาจจะถูกสร้างขึ้นใน repository สองอันก็ได้ (R1 และ R2) ถ้า repository ทั้งคู่มีเซ็ตการแก้ไขบรรพบุรุษอันเดียวกัน (P) และคุณคอมมิทเซ็ตการแก้ไขใหม่ C1 โดยมี P เป็นบรรพบุรุษของเซ็ตการแก้ไขนี้ใน R1 และมีผู้ใช้อีกคน (หรือคนเดียวกันก็ได้) ทำการคอมมิทเซ็ตการแก้ไขใหม่ที่มีบรรพบุรุษเดียวกันเช่นกันใน R2 ในกรณีนี้เราสามารถมอง repository ทั้งสองเป็น "กิ่ง" ได้เช่นกัน
หมายเหตุ: หลังจากการใช้คำสั่ง hg --repository R1 pull --rev 3b978afa9ee5 R2 repository R1 จะเหมือนกับ R0 และคำสั่งนี้จะทำการเพิ่มส่วนยอดใหม่ใน R1 เช่นกัน
เราสามารถมองเซ็ตการแก้ไขใน Mercurial เป็นส่วนหนึ่งของกิ่งได้เช่นกัน ถ้าเราใช้ความหมายนี้ กิ่งก็คือเซ็ตการแก้ไขที่ต่อเนื่องกันตามลำดับ
กิ่งที่มีชื่อ
Mercurial สนับสนุนการ ตั้งชื่อ ให้กับกิ่งต่างๆ โดยใช้คุณสมบัติชื่อกิ่งของเซ็ตการแก้ไข (ลองดู ThaiNamedBranches) ถ้ากิ่งไม่มีชื่อ Mercurial จะใช้ชื่อ "default" เพราะฉะนั้นกิ่งปริยายหรือกิ่งเริ่มต้นของ repository ก็จะมีชื่อว่า "default" เช่นกัน (ซึ่งคุณจะไม่เห็นเมื่อใช้คำสั่ง hg log) คุณสามารถใช้คำสั่ง hg branches เพื่อแสดงชื่อกิ่งทั้งหมดใน repository:
> hg help branches hg branches [-a] list repository named branches List the repository's named branches, indicating which ones are inactive. If active is specified, only show active branches. A branch is considered active if it contains unmerged heads. options: -a --active show only branches that have unmerged heads use "hg -v help branches" to show global options
คุณสามารถใช้คำสั่ง hg branch เพื่อตั้งชื่อกิ่งได้ โดยกิ่งนี้จะกลายเป็นกิ่งที่ถูกใช้ในการคอมมิทครั้งต่อๆไป:
> hg help branch hg branch [-f] [NAME] set or show the current branch name With no argument, show the current branch name. With one argument, set the working directory branch name (the branch does not exist in the repository until the next commit). Unless --force is specified, branch will not let you set a branch name that shadows an existing branch. options: -f --force set branch name even if it shadows an existing branch use "hg -v help branch" to show global options
คุณสามารถตั้งชื่อกิ่งใน Mercurial เป็นอะไรก็ได้ อย่างไรก็ตาม เราแนะนำให้คุณตั้งชื่อกิ่งต่อเมื่อมีความจำเป็นและสำหรับกิ่งที่จะมีการใช้งานในระยะยาวเท่านั้น เช่นกิ่งสำหรับเก็บ release ("release branches") เช่น rel-1, rel-2, ฯลฯ เป็นต้น
ผู้ใช้ Mercurial บางคนก็ไม่ได้ตั้งชื่อกิ่งเลย ซึ่งก็โอเคเพราะใน Mercurial คุณแทบไม่มีกรณีที่ต้องการตั้งชื่อกิ่งด้วยซ้ำ (เพราะคุณสามารถทำสำเนา repository ได้ง่ายๆ) ผู้ใช้บางคนก็เห็นว่าชื่อกิ่งมีประโยชน์ บางคนก็ไม่ การใช้ความสามารถนี้ขึ้นอยู่กับว่าคุณเห็นว่าเหมาะสมหรือไม่
1. คุณสมบัติของเซ็ตการแก้ไข
(จากข้อความ http://selenic.com/pipermail/mercurial/2008-February/017099.html โดย Yao Zhang ใน ในกระดานข่าวของ mercurial)
Mercurial ให้ความแตกต่างเล็กน้อยระหว่างคอนเซปต์ของ "ประวัติการแก้ไขที่แยกออกไปในทิศทางต่างกัน" กับ ชื่อของ "กิ่ง"
ชื่อกิ่งเป็นคุณสมบัติที่ติดไปกับเซ็ตการแก้ไข โดยคุณสามารถสร้างชื่อกิ่งใหม่ในเซ็ตการแก้ไขที่ยังต่อเนื่องกันอยู่ก็ได้ เช่น:
hg branch branch-1 # ตั้งชื่อกิ่งใหม่ # แก้ไขบางอย่างใน repository hg commit -m "branch-1" # เซ็ตการแก้ไขมีชื่อกิ่งว่า "branch-1" hg branch branch-2 # ตั้งชื่อกิ่งใหม่อีก # แก้ไขบางอย่างใน repository hg commit -m "branch-2" # เซ็ตการแก้ไขใหม่มีชื่อกิ่งว่า "branch-2"
คุณจะเห็นว่าไม่มี "ประวัติการแก้ไขที่แยกออกไปในทิศทางที่ต่างกัน" ในตัวอย่างด้านบน และคุณยังสามารถแก้ไขชื่อกิ่งด้วย
อีกกรณีนึงคือมี "ประวัติการแก้ไขที่แยกออกไปในทิศทางที่ต่างกัน" ซึ่งจะเกิดขึ้นเมื่อมีการแก้ไขต่างกันสองอันที่มีบรรพบุรุษเดียวกัน ซึ่งเซ็ตการแก้ไขเหล่านี้จะมีชื่อกิ่งเหมือนกับชื่อกิ่งของบรรพบุรุษ
ลองดู