คลังเก็บ Mercurial ขนาดใหญ่ต้องทนทุกข์ทรมานจาก“ การแข่งขันแบบผลัก” หรือไม่?


9

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

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

ปัญหาที่ฉันเห็น

  1. ผู้ใช้พยายามที่จะผลักดัน
  2. ล้าสมัย (mercurial จะไม่ยอมให้คุณผลักถ้า repo ในพื้นที่ของคุณล้าสมัย) ดังนั้นคุณจึงดึงและรวมการเปลี่ยนแปลงในท้องถิ่นของคุณ
  3. ผู้ใช้พยายามที่จะผลักดันอีกครั้ง แต่ในขณะที่พวกเขากำลังรวมคนอื่นผลักดังนั้นพวกเขาล้าสมัยอีกครั้ง
  4. ดึงแล้วผสานอีกครั้ง
  5. ยังล้าสมัย
  6. ทำซ้ำ

ฟังดูคุ้น ๆ ไหม?

นี่เป็นปัญหาที่เกิดขึ้นจริงกับ repos mercurial ขนาดใหญ่และเป็นที่นิยมหรือไม่? สิ่งที่เกี่ยวกับภายใน บริษัท เมื่อทุกคนผลักดันขั้นสุดท้ายของวัน


ใครที่ไม่แตกสาขาในฝ่ายเมตตา hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
Carson Myers

@Carson ในสาขาคอมไพล์ราคาถูก ใน Mercurial พวกมันถาวรมากขึ้น โดยทั่วไปฉันได้ยินมาว่าในสาขาคุณต้องทำงานกับคุณสมบัติในเชิงเมตตาคุณได้สร้างหัวใหม่หรือโคลนไปยังไดเรกทอรีอื่น
TheLQ

ดีคุณสามารถเพิ่ม--close-branchเมื่อกระทำ - และ Mercurial ได้ตั้งชื่อสาขาคุณไม่จำเป็นต้องลอกแบบไปยังไดเรกทอรีใหม่
Carson Myers

@Carson ฉันไม่ได้บอกว่าคุณทำไม่ได้หรือมันเป็นไปไม่ได้ฉันแค่บอกว่าฉันเคยได้ยินเสมอว่าการประชุมคือการโคลนนิ่งหรือสร้างหัวใหม่ไม่ใช่สาขา repos mercurial ส่วนใหญ่ที่ฉันเห็นมีเพียงไม่กี่กิ่งในขณะที่ repos git มักจะมีพวง
TheLQ

ฉันไม่แน่ใจฉันไม่เคยใช้คอมไพล์
Carson Myers

คำตอบ:


8

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

ใน บริษัท อื่นฉันไม่สามารถรับรองกระบวนการได้ แต่ที่ที่ฉันทำงานนี่ไม่ใช่ปัญหา

ดูว่าเมื่อคุณกำลังทำงานในกรณีที่คุณกำลังทำงานในสาขาของ repo ทั้งหมดดังนั้นการร้องขอของคุณไปที่ลำต้นระยะไกลรุ่นหลัก เมื่อคุณต้องการที่จะรวมการเปลี่ยนแปลง (เสร็จสิ้น) ของคุณเข้ากับลำต้นที่คุณโหลดลำตัวขึ้นให้ดึงผสานรวมดัน

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

นั่นคือความงามของ DVCS: การแตกแขนงนั้นไม่เจ็บปวดดังนั้นทุกคนสามารถทำงานในสาขาของตนเองได้

แก้ไข

โอ้ฉันเพิ่งสังเกตุ "Mercurial คุณไม่ได้สาขา ... " ความคิดเห็น: ใช่คุณทำ คุณไม่จำเป็นต้อง แต่เนื่องจากมันง่ายและประโยชน์ของการทำเช่นนั้นมีมากกว่าเมื่อไม่ทำเช่นนั้นอย่างมากคุณจึงมักจะเปลี่ยนสาขามาก


ฉันได้ยินมาเสมอว่าคุณโคลนเพื่อทำงานกับคุณลักษณะทดลองไม่ใช่สาขา เหตุผลส่วนใหญ่ที่ฉันได้ยินคือในสาขา Mercurial นั้นถาวรมากกว่าใน Git ฉันอาจจะผิด
TheLQ

นั่นคือสิ่งที่เท่าปรอทเป็นห่วงโคลนเป็นสาขา, คุณยังสามารถทำทุกอย่างสวยมากที่คุณสามารถทำอะไรกับ "หัว" มาตรฐาน (และบางสิ่งอื่น ๆ !) แต่คุณมีความหรูหราเพิ่มของการดึง / ผลักระดับระยะทางจากลำตัว ฉันไม่แน่ใจว่าสิ่งที่คุณหมายถึงเกี่ยวกับความคงทนเมื่อคุณทำกับโคลนของคุณคุณสามารถลบมัน
Ed James

ทำไมไม่มีการเร่งรีบ 5 โมงเย็น?
Cem Catikkas

อย่างที่ฉันพูดส่วนใหญ่เวลาที่ทุกคนทำงานในสาขาของตัวเอง (คุณไม่น่าจะทำงานในประเด็นเดียวกันกับคนอื่นอย่างแน่นอน) ดังนั้นในขณะที่ทุกคนผลักดันในตอนท้ายของวันเพื่อสาขาที่แตกต่างกัน นอกจากนี้ในที่ทำงานของเราเรามีเวลาที่ยืดหยุ่นดังนั้นจึงเป็นเรื่องเร่งด่วน 16: 00-18: 00
Ed James

1

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


OP กำลังสร้างความแตกต่างเกี่ยวกับคอมไพล์และ hg ที่นี่ แต่คำตอบของคุณมีเป้าหมายเพื่อคอมไพล์ (ตัวอย่างเช่นลิงค์แรกคือคอมไพล์แบบ git-oriented) มันเป็นคำตอบที่ถูกต้อง (เนื่องจากการตีความผิด ๆ ของ OP ในรูปแบบของ hg นำไปสู่คำถาม) แต่มันก็คุ้มค่าที่จะสังเกตว่ามันเหมือนกันสำหรับ hg
Ed James

@ จุดที่ดีได้รับการปรับปรุงเพื่อชี้แจงว่าคำตอบนั้นใช้ได้กับทั้งคอมไพล์และปรอท
Rein Henrichs

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