การปิดสาขา Hg


103

เมื่อใช้hg branch FeatureBranchNameและเผยแพร่ไปยัง repo ส่วนกลางที่ใช้ร่วมกันระหว่างนักพัฒนาจะมีวิธีปิดในที่สุดFeatureBranchNameเมื่อการพัฒนาถูกรวมเข้ากับสาขาเริ่มต้นอย่างเป็นทางการหรือไม่?

นอกจากนี้ยังจะมีประโยชน์หากFeatureBranchNameมองไม่เห็นเมื่อดำเนินการhg branchesคำสั่ง

คำตอบ:


158
hg commit --close-branch

ควรจะเพียงพอที่จะทำเครื่องหมายปิดสาขา (ดูhg commit)

--close-branch

ทำเครื่องหมายสาขาว่าปิดแล้วซ่อนจากรายการสาขา

ดูหัวข้อนี้ด้วย :

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

ฉันควรทราบว่าฉันคาดว่าสาขาที่ปิดจะยังคงอยู่ในที่เก็บ อาจเป็นประโยชน์ในอนาคตและcommit --close-branchอย่างน้อยข้อความควรอธิบายว่าเหตุใดสาขาจึงถูกปิด
การตัดแต่งกิ่งเป็นอีกสิ่งหนึ่งโดยสิ้นเชิง


หมายเหตุ: ธุรกิจ "การปิดสาขา" เป็นแง่มุมหนึ่งที่ขาดหายไปใน Git เมื่อเทียบกับ Mercurial :

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

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


3
มีวิธีปิดสาขานอกกระแสหรือไม่?
Thomas S.

@ โทมัสเอส. 5 ปีต่อมาไม่รู้แน่ ล่าสุดมีการปรับปรุงเอกสาร: mercurial.808500.n3.nabble.com/…
VonC

1
@ โทมัสเอส. ใช่คำตอบนี้ช่วยฉันแก้ปัญหานั้นได้ hg debugsetparent <revision> hg branch <branchOfRevision> โปรดทราบว่าคำสั่งนั้นสำคัญ สิ่งนี้จะทำให้ repo ของคุณคิดว่าอยู่ในการแก้ไขใหม่ในขณะที่ไฟล์ทั้งหมดของคุณมาจากไฟล์เริ่มต้น หลังจากนั้นคุณสามารถใช้ --close-branch คอมมิต แต่ใช้อ็อพชัน -X * เพื่อสร้างคอมมิตว่าง hg commit --close-branch -X * -m "Closing branch."
Maske

8

ผมเขียนสคริปต์ง่ายที่เสร็จสมบูรณ์ใกล้สาขาที่คำสั่งที่พบในที่PruningDeadBranches

## สคริปต์ ##

#!/bin/bash
#script to close the not required branch in mercurial

hg up -C $1
if [ $? -eq 0 ]; then
    echo "$1 is up"
else
    echo "branch not found, please recheck your argument"
    exit 1
fi 
# if we are here then the branch is up, so we do the following
hg commit --close-branch -m 'this branch no longer required' 
echo "$1 is closed"
hg up -C default
echo "default is up" 

ทำอย่างไร

ย้ายไปที่สำเนาโลคัลของที่เก็บและรันสคริปต์นี้โดยให้อาร์กิวเมนต์ ตัวอย่างเช่น:

$./the_script_above.sh bad_branch_name_to_close

มันทำอะไร

สิ่งนี้ทำสิ่งต่อไปนี้:

  1. หากมีสาขาอยู่สาขานั้นจะอัปเดตไปยังสาขาที่กำหนดหรือมีข้อความแสดงข้อผิดพลาด
  2. มันปิดสาขา
  3. อัปเดตสาขาเริ่มต้น
  4. หยุด

สคริปต์ไม่จัดการสาขาที่มีช่องว่างในชื่อ
Jared

@ Jared คุณสามารถเรียกใช้คำสั่ง up ที่เป็นอิสระกับสาขาของคุณได้ เช่น: $ hg update yourbranchnamecontainingspace. ผมคิดว่าเราสามารถสร้าง BRANCHNAME มีพื้นที่ แต่คุณจะได้รับข้อผิดพลาดในการแยกวิเคราะห์เมื่อคุณเรียกใช้คำสั่งปรอทเช่นการปรับปรุง คุณอาจต้องการใช้อักขระเว้นวรรคในขณะที่ส่งชื่อสาขาเป็นพารามิเตอร์ไปยังสคริปต์ ไชโย
Roshan Poudyal

ไม่ใช่ echo "$1 is up"ซ้ำกันที่นี่? ในthenและหลังfi? นอกจากนี้สคริปต์ดังกล่าวอาจเป็นประโยชน์หากรองรับตัวเลือกในการรวมเป็นค่าเริ่มต้นในครั้งเดียว
YakovL

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