ฉันเป็นผู้ใช้คอมไพล์สับสนโดยการแตกแขนงของ Mercurial ฉันจะติดตามการเปลี่ยนแปลงเล็กน้อยได้อย่างไร


32

ฉันเคยใช้คอมไพล์มาก่อน แต่ฉันต้องการมีส่วนร่วมกับไพ ธ อนดังนั้นตอนนี้ฉันต้องเรียนรู้ Mercurial และฉันพบว่ามันน่าหงุดหงิดมาก

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

ตอนนี้แพทช์ของฉันถูกปฏิเสธและฉันต้องการลบสาขาบุ๊กมาร์กของฉันจากที่เก็บของฉัน ตกลงใน git ฉันจะบังคับลบสาขาของฉันและลืมมันดังนั้นฉันลบบุ๊คมาร์คของฉันและตอนนี้ฉันมีปัญหาต่อไปนี้:

  • TortoiseHG และhg logยังคงแสดงให้เห็นว่าการกระทำและdefaultสาขามี 2 หัว และถ้าฉันเข้าใจถูกต้องคุณจะไม่สามารถลบการคอมมิทเป็น hg หากไม่มีปลั๊กอินเพิ่มเติม

  • Mercurial ไม่เพียง แต่แฮช แต่ยังปรับปรุงหมายเลข ในขณะที่ฉันเพิ่มความมุ่งมั่นของตัวเองสองสามข้อความมุ่งมั่นทั้งหมดที่ดึงมาหลังจากนั้นมีหมายเลขการแก้ไขที่แตกต่างจาก repo ส่วนกลางหลัก

  • ฉันhg updateดึงหลังจากย้ายmasterบุ๊กมาร์กของฉันไปยังการคอมมิชชันล่าสุดโดยอัตโนมัติ แต่ฉันไม่สามารถหาวิธีที่จะทำได้ใน TortoiseHG

ผมทำอะไรผิดหรือเปล่า? นี่เป็นเรื่องปกติและคาดหวังและฉันควรจะเพิกเฉยต่อปัญหาเหล่านี้หรือไม่ หรือฉันจะทำงานกับสาขาของฉันได้อย่างไร

คำตอบ:


22

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

เพียงโคลนที่เก็บของพวกเขาและทำงานในนั้นจากนั้นทำการร้องขอการดึง

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

Mercurial มีหน้าเพจทั้งหมดในวิกิของตนซึ่งอธิบายวิธีต่างๆของ "การตัดกิ่งที่ตายแล้ว " ตัวเลือก "การใช้โคลน" ควรตอบสนองความต้องการของคุณ

หากต้องการตอบปัญหาเฉพาะของคุณเพิ่มเติม ...

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

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

ประวัติการปรับปรุงถือเป็นสิ่งที่ไม่ดีในโลก Mercurial ดังนั้นผลิตภัณฑ์วานิลลาไม่ได้มีทุกอย่างที่ผู้ใช้ Git คิดว่าควรมี แต่มีปลั๊กอินมากมายสำหรับผู้ที่ต้องการใช้แอปพลิเคชัน แต่มีลำดับความสำคัญต่างกัน

Mercurial ไม่เพียง แต่แฮช แต่ยังปรับปรุงหมายเลข ในขณะที่ฉันเพิ่มความมุ่งมั่นของตัวเองสองสามข้อความมุ่งมั่นทั้งหมดที่ดึงมาหลังจากนั้นมีหมายเลขการแก้ไขที่แตกต่างจาก repo ส่วนกลางหลัก

ไม่ต้องกังวลกับหมายเลขการแก้ไข พวกเขาเป็นเรื่องของความสะดวกสบายไม่มาก รหัสแฮชเป็นตัวระบุที่สำคัญที่จะส่งผ่านจาก repo ไปยัง repo หมายเลขการแก้ไขไม่สอดคล้องกันในที่เก็บ ลองอ่านHg Initเพื่อรับคำอธิบายที่ดี

หมายเลขการแก้ไขเป็นเพียงทางลัดที่สะดวกสบายและน่าจดจำยิ่งขึ้นเมื่อทำงานกับ repo เพียงครั้งเดียว

ฉันอัปเดต hg หลังจากดึงเพื่อย้ายบุ๊กมาร์กหลักของฉันไปยังการคอมมิชชันล่าสุดโดยอัตโนมัติ แต่ฉันไม่สามารถหาวิธีที่จะทำได้ใน TortoiseHG

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


ฉันเคยเห็นข้อโต้แย้งก่อนหน้านี้ว่าชื่อสาขาที่เหมาะสมนั้นหมายความว่าประวัติการแก้ไขไม่จำเป็นใน hg
jk

9

เห็นได้ชัดว่ามี 4 วิธีในการจัดการการแตกแขนงใน Mercurial 1 และ 4 ดูไร้สาระอย่างสมบูรณ์สำหรับฉันสาขาชื่อดูเหมือนจะเป็นเฮฟวี่เวท

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

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

TortoiseHG และบันทึก hg ยังคงแสดงให้เห็นว่าการกระทำและสาขาเริ่มต้นมี 2 หัว

ซึ่งเป็นเหตุผลที่ใช้สาขาที่มีชื่อแทนการทิ้งทุกอย่างไว้ในdefaultนั้น

และถ้าฉันเข้าใจถูกต้องคุณจะไม่สามารถลบการคอมมิทเป็น hg หากไม่มีปลั๊กอินเพิ่มเติม

คุณไม่สามารถจริงลบอะไรใน Mercurial ที่ทุกคนและคุณไม่ควร คุณสามารถใช้hg stripแต่มันไม่ได้เข้าสู่ระบบ - คุณ basicaly เพิ่งตัดส่วนหนึ่งของ repo ท้องถิ่นของคุณ คุณไม่สามารถผลักดันสิ่งนั้นและถ้าคุณดึงจาก repo ที่มีสาขาที่คุณปล้นอยู่ภายในมันจะกลับมา

Mercurial ไม่เพียง แต่แฮช แต่ยังปรับปรุงหมายเลข ในขณะที่ฉันเพิ่มความมุ่งมั่นของตัวเองสองสามข้อความมุ่งมั่นทั้งหมดที่ดึงมาหลังจากนั้นมีหมายเลขการแก้ไขที่แตกต่างจาก repo ส่วนกลางหลัก

ตัวเลขไม่ได้มีความหมายอะไรเลย คุณสามารถเพิกเฉยพวกเขาหากพวกเขาสับสนคุณ

ฉันอัปเดต hg หลังจากดึงเพื่อย้ายบุ๊กมาร์กหลักของฉันไปยังการคอมมิชชันล่าสุดโดยอัตโนมัติ แต่ฉันไม่สามารถหาวิธีที่จะทำได้ใน TortoiseHG

ฉันไม่ได้ใช้ TortoiseHG แต่hg pull -uจะทำทั้งสองอย่างและpullupdate

ฉันเคยใช้คอมไพล์มาก่อน แต่ฉันต้องการมีส่วนร่วมกับไพ ธ อนดังนั้นตอนนี้ฉันต้องเรียนรู้ Mercurial และฉันพบว่ามันน่าหงุดหงิดมาก

ไม่เป็นไรผู้ใช้ Mercurial หลายคนรู้สึกเหมือนกันเกี่ยวกับ Git (รวมถึงฉันด้วย)


6

แม้ว่า Mercurial และ Git จะคล้ายกัน แต่ก็มีการออกแบบที่แตกต่างกันบางทีความแตกต่างของการออกแบบที่สำคัญที่สุดก็คือในการปรับเปลี่ยน Mercurial การปรับเปลี่ยนประวัติศาสตร์นั้นไม่ยืดหยุ่นเหมือนกับในคอมไพล์

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

ก่อนอื่นให้พยายามทำให้กระจ่างบางสิ่งที่คุณพูดถึง:

  • 1 และ 4 ถือว่าเป็นการแยกสาขาเนื่องจากทุกครั้งที่คุณส่งมอบคุณจะสร้างสาขาที่ไม่มีชื่ออย่างมีประสิทธิภาพ (หากมีการส่งมอบอีกครั้งในเวลาเดียวกันที่แหล่งที่มา / พร repo ของคุณ) ซึ่งเป็นสาขาทางเทคนิค ในวิธีที่ 4 คุณกำลังสร้าง "หัว" ใหม่ในขณะที่ในวิธีที่ 1 คุณไม่ได้ หัวควรจะถูกผสาน ฉันเห็นด้วยกับวิธีที่ 1 ว่าโง่ แต่บางคนก็ชอบ ... สำหรับโครงการขนาดเล็กฉันเดา

  • เกี่ยวกับวิธีที่ 2 ก็เป็นได้ที่สาขาที่หนักก็คือว่าพวกเขาเป็นสิ่งที่ถาวร คุณไม่สามารถลบสาขาได้เว้นแต่คุณจะใช้บางอย่างเช่นส่วนขยายแถบ อีกครั้งปรัชญาการออกแบบของ Mercurial ไม่ได้มุ่งไปที่การปรับเปลี่ยนประวัติศาสตร์ (แต่จะดีขึ้นกว่าเดิม)

  • เกี่ยวกับหมายเลขการแก้ไขพวกเขาเป็นเพียงการอ้างอิงในท้องถิ่นและสามารถอ่านได้อย่างมนุษย์ปุถุชนสำหรับคุณที่จะใช้คำสั่งทั้งหมดที่เกี่ยวข้องกับการแก้ไข หากคุณชอบใช้แฮชคุณยังสามารถทำได้ หมายเลขการแก้ไขเป็นเพียงทางลัดและไม่สนใจ Mercurial สำหรับการดำเนินการภายในระหว่างที่เก็บข้อมูลต่างๆ

ตอนนี้เพื่อตอบคำถามอื่นของคุณ:

  • คุณสามารถตรวจสอบสิ่งที่คุณมีหัวhg headsถ้าคุณเห็น 2+ หัวในสาขาที่มีชื่อเดียวก็จะดีกว่าที่พวกเขาจะถูกรวมเข้าด้วยกัน ที่น่าจะเป็นที่คั่นหน้าของคุณ
  • เพื่อกำจัดการแก้ไขที่คุณเพิ่งทำคุณสามารถทำได้hg rollbackแต่ฉันเดาว่านี่ไม่ใช่กรณี
  • หากต้องการลบบุ๊กมาร์กให้ทำ hg bookmark --delete yourbookmark
  • คุณจะมีความสุขที่จะตัดกิ่งไม้ในประวัติศาสตร์ได้ง่าย มองเข้าไปในส่วนขยาย Rebaseและการดำเนินงานของสตริป
  • Mercurial แล้วมาพร้อมกับขยายหลาย แต่พวกเขาจะไม่เปิดใช้งานโดยค่าเริ่มต้น เพียงไปที่โฟลเดอร์ใดก็ได้และคลิกขวาที่ใดก็ได้เพื่อรับเมนูบริบท TortoiseHG ไปที่การตั้งค่าส่วนกลางแล้วเลือกนามสกุล: เปิดใช้งานส่วนขยาย MQ และส่วนขยาย Rebase สิ่งนี้ไม่ทำลายความเข้ากันได้ระหว่างที่เก็บข้อมูลใด ๆ
  • ตอนนี้คุณอยู่ที่นี่คุณสามารถ:
    • Strip ที่บุ๊กของคุณเริ่มต้น (ซึ่งอาจจะช่วยแก้ไขปัญหาของคุณ)
    • เพื่อให้มองเห็นได้ง่ายขึ้นบางทีคุณอาจรีบูตการเปลี่ยนแปลงที่ด้านหน้าแล้วดึงออกในภายหลัง ฉันเพิ่งพูดถึงการรีบูตเพราะมันอาจเป็นสิ่งที่มีประโยชน์สำหรับคุณในบางครั้ง

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

ในที่สุดคุณไม่ได้ทำอะไรผิดพลาดโปรดจำไว้ว่าพวกเขาเป็นเพียงเครื่องมือต่าง ๆ ที่สร้างขึ้นด้วยความคิดที่แตกต่างกันเล็กน้อยซึ่งค่อนข้างเดือดลงไปที่: การปรับเปลี่ยนประวัติ (git) หรือไม่ปรับเปลี่ยนประวัติ (hg) ใน Mercurial มันยากที่จะยิงตัวเองในการเดินเท้าการปรับเปลี่ยนประวัติศาสตร์ (พิเศษกับเฟส) และนั่นคือเหตุผลบางอย่างเช่นมันได้ดีกว่าคอมไพล์


hg stripไม่มีทางที่จะรับประกันว่าสำเนาการกระจายอำนาจทั้งหมดของการแก้ไขที่บันทึกชื่อสาขาได้ถูกลบหลังจากรันเป็น ฉันเดาว่าใคร ๆ ก็เถียงกันเรื่องการกระจายอำนาจของชื่อสาขา Git ยกเว้นความแตกต่างที่ชื่อสาขามีพื้นที่ชื่อทั่วโลกและชื่อสาขา Git ไม่ได้ และมีหัวหลายอันเนื่องจากชื่อกิ่ง มันเป็นข้อผิดพลาดในการออกแบบการติดเชื้อสำหรับ VCS แบบกระจายอำนาจ
Shelby Moore III

1

ฉันพบว่า Mercurial ง่ายที่สุดที่จะไม่กังวลเรื่องกิ่งไม้ ฉันเพิ่งพบว่าในประวัติศาสตร์ที่ฉันต้องการแก้ไขและสร้างความมุ่งมั่นตามที่ต้องการ (หรือที่ไม่รู้จักสาขา) บางครั้งบุ๊กมาร์กอาจมีประโยชน์หากฉันต้องข้ามไปมาระหว่างหัวในบริบทที่แตกต่างกัน แต่ส่วนใหญ่ฉันมักจะไม่สนใจพวกเขา กิ่งที่มีชื่อนั้นใช้ได้สำหรับสาขาที่มีอายุการใช้งานนาน (สาขาแก้ไขข้อบกพร่อง, สาขาโครงการ) แต่สำหรับการแก้ไข 1 หรือ 2 ครั้งซึ่งไม่ได้เป็นเครื่องมือที่เหมาะสมสำหรับงาน

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


-1

ฉันคิดว่าเราสามารถใช้บุ๊กมาร์กแทนสาขาได้ เรากำลังจะสนับสนุนผลิตภัณฑ์ต่อไปและการรวมสาขาสองสาขาในระยะยาวจะทำให้ปวดหัวมาก

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