เรากำลังโค่นล้ม Geeks และเราต้องการทราบประโยชน์ของ Mercurial [ปิด]


22

มีอ่านฉัน geek โค่นล้มทำไมฉันจึงควรพิจารณาหรือไม่พิจารณา Mercurial หรือ Git หรือ DVCS

ฉันมีคำถามติดตามที่เกี่ยวข้อง ฉันอ่านคำถามนั้นและอ่านลิงก์และวิดีโอที่แนะนำและฉันเห็นประโยชน์ แต่ฉันไม่เห็นภาพรวมผู้คนที่กำลังพูดถึง

ทีมงานของเรามีนักพัฒนา 8-10 คนที่ทำงานบนฐานรหัสขนาดใหญ่หนึ่งโครงการซึ่งประกอบด้วย 60 โครงการ เราใช้การโค่นล้มและมีลำตัวหลัก เมื่อนักพัฒนาเริ่มกรณี Fogbugz ใหม่พวกเขาสร้างสาขา svn ทำผลงานในสาขาและเมื่อพวกเขาทำเสร็จพวกเขารวมกลับไปที่ลำต้น บางครั้งพวกเขาอาจอยู่ในสาขาเป็นเวลานานและรวมลำตัวกับสาขาเพื่อรับการเปลี่ยนแปลง

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

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

หลังจากสร้างสาขาการชำระเงินไฟล์ 60k + ต่อไปนี้ใช้เวลาสักครู่ แต่นั่นจะเป็นปัญหากับระบบควบคุมแหล่งใด ๆ ที่เราต้องการใช้

มีประโยชน์บางประการของ DVCS ที่เราไม่เห็นว่าจะเป็นประโยชน์อย่างมากสำหรับเราหรือไม่?


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

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

คุณได้ลองใช้Hg Init แล้วหรือยัง? มันเป็นแบบฝึกหัด Mercurial ที่เขียนโดย Joel Spolsky มันเริ่มต้นด้วยบทสำหรับผู้ใช้การโค่นล้ม แต่อย่างอื่นคาดว่าคุณจะไม่รู้อะไรเกี่ยวกับ DVCS
Barry Brown

คำตอบ:


11

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

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

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

ความสามารถในการทำคอมมิทระดับกลางนั้นคุ้มค่าด้วยตัวของมันเอง นั่นเป็นสิ่งที่คุณต้องสัมผัสด้วยตัวคุณเอง

ความเร็วที่ได้รับจากการซื้อ repo ในพื้นที่ของคุณก็คุ้มค่าด้วยตัวมันเอง ใช่โคลนเริ่มต้นจะช้าลงอย่างหลีกเลี่ยงไม่ได้ใน VCS สำหรับ repo ไฟล์ 60k แต่เมื่อคุณมีแล้วการตรวจสอบสาขาใหม่คือคำสั่งที่มีขนาดเร็วขึ้นด้วย DVCS


2
+1! นอกจากนี้หากคุณให้ Mercurial ลองอย่างยุติธรรมและละเอียดถี่ถ้วนฉันมั่นใจว่าคุณจะไม่อยากกลับไป
Pete

1
"คุณต้องถามตัวเองว่าคุณจะทำอย่างไรกับสาขาจำนวนมากเท่าที่คุณต้องการที่จะแบ่งปันให้กับคนที่คุณต้องการและมีเพียงพวกเขาเท่านั้น" ... "คนสองคนที่ทำงานในฝั่งตรงข้ามของอินเทอร์เฟซ? อื่น ๆ เป็นประจำ แต่ยังไม่เสถียรพอที่จะแบ่งปันกับทุกคนพวกเขาสามารถสร้างสาขาเพื่อแบ่งปันกันเองจากนั้นรวมมันกลับเข้าไปในที่เก็บส่วนกลางเมื่อมันพร้อม " ตอนนี้เรามีทั้งหมดของการโค่นล้ม
Matt

@ แมทแล้วคุณโชคดีมากที่ธุรกิจของคุณมีข้อยกเว้นมากกว่ากฎ บริษัท ส่วนใหญ่มีกฎระเบียบที่เข้มงวดมากเกี่ยวกับการสร้างสาขาบนทรัพยากรที่ จำกัด ของเซิร์ฟเวอร์กลางดังนั้นผู้คนจึงไม่คิดที่จะสร้างพวกเขาด้วยเหตุผลชั่วคราว
Karl Bielefeldt

3
ฉันคิดว่าคำตอบนี้หายไปจากความจริงที่ว่าผู้โพสต์ดั้งเดิมได้บังคับให้ SVN ทำงานในลักษณะที่ใกล้กับเวิร์กโฟลว์ DVCS มากกว่าผู้ใช้ SVN ส่วนใหญ่จะพิจารณาความเป็นไปได้ ในสาระสำคัญพวกเขามีความคิด DVCS อยู่แล้วดังนั้นจึงไม่จำเป็นต้องเปลี่ยนความคิดพื้นฐาน
Mark Booth

จุดดี @ Mark ในทีมเล็ก ๆ เช่นนี้การประชุมตามปกติจำนวนมากสำหรับทีมขนาดใหญ่ออกไปนอกหน้าต่าง ฉันยังคิดว่ามันมีค่าสำหรับเหตุผลความเร็ว
Karl Bielefeldt

1

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

หากคุณมีนักพัฒนาที่ไม่สามารถทำงานได้หากไม่มี DVCS ให้ชี้ไปที่ svn gateways สำหรับ hg หรือ git ทำให้ชัดเจนสำหรับพวกเขาว่าการเช็คอินที่เก็บ svn ต้องสอดคล้องกับโพรซีเดอร์และกระบวนการที่เหลือของทีมที่ใช้ ข้อดีอีกประการของวิธีนี้คือความกระตือรือร้น DVCS จริงที่ใช้เกตเวย์โดยไม่บอกคุณตอนนี้สามารถออกมาจากตู้เสื้อผ้า :-)


เราต้องการเปลี่ยนเวลาหรือไม่? ไม่โดยเฉพาะเมื่อเราเปลี่ยนมาใช้ svn ใน 2 ปีที่ผ่านมาเท่านั้น ขอบคุณสำหรับความคิดเห็นของคุณ
Matt

1

ดูเหมือนว่าคุณกำลังใช้เวิร์กโฟลว์ซึ่งคล้ายกับขั้นตอนการทำงานที่หลาย ๆ คนนำมาใช้หลังจากที่พวกเขาเริ่มใช้ DVCS

จากมุมมองของคุณ DVCS จะมีข้อได้เปรียบที่สำคัญต่อไปนี้มากกว่า SVN:

  • เมื่อคุณโคลน repo (s) การดำเนินการจำนวนมากสามารถดำเนินการในท้องถิ่น
    • เมื่อดูที่บันทึกของที่เก็บข้อมูลไม่จำเป็นต้องแตะเซิร์ฟเวอร์ svn ดังนั้นจึงรวดเร็วอย่างไม่น่าเชื่อ
    • ในทำนองเดียวกันการสลับสาขาไม่ต้องการการเข้าถึงเซิร์ฟเวอร์หรือทำโคลนนิ่งในระบบ
  • เพราะสาขาเส้นทางที่แตกต่างกันเพียงแค่ผ่านประวัติศาสตร์พื้นที่เก็บข้อมูลของคุณไม่ได้รกกับทุกคนทุกสาขาได้สร้างทุก (เราเท่านั้นจริงๆมีการเปิดตัวสาขาใน SVN แต่branchesไดเรกทอรีไดเรกทอรีย่อยยังคงมีหลายคนที่ไม่เกี่ยวข้อง)
    • ในคอมไพล์เมื่อสาขาได้รับการรวมกลับเข้ามาและการอ้างอิงที่ถูกลบคุณอาจไม่เคยรู้ว่ามันอยู่ที่นั่น
    • ใน Mercurial คุณสามารถเลือกที่จะตั้งชื่อสาขา (ในกรณีที่มันถูกเข้ารหัสในแต่ละเซ็ตการแก้ไขในแบบถาวร) หรือเพียงแค่สร้างสาขาที่ไม่มีชื่อ (ทอพอโลยี) ซึ่งจะรวมเข้ากับประวัติศาสตร์อย่างเงียบ ๆเมื่อมันmergeกลับเข้าสู่default( trunk)
  • ใน SVN สาขาของกิ่งไม้นั้นคลุมเครือเกินกว่าจะเป็นประโยชน์ ในgitและhgพวกเขาเป็นเพียงตราไว้หุ้นละสำหรับหลักสูตร
  • DVCS เข้าใจว่าการพัฒนาซอฟต์แวร์เป็นDAGเช่นเมื่อคุณรวมคุณจะพบกับชุดการแก้ไขที่มีผู้ปกครองหลายคน SVN (อย่างน้อยรุ่นที่ฉันเคยใช้) ไม่เข้าใจสิ่งนี้จริงๆ

ในจุดสุดท้ายนั้นคุณพูด

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

ในการเปลี่ยนจากการใช้hgเฉพาะกับการใช้svnเพียงอย่างเดียวแล้วgitsvnจะได้รับประสบการณ์ของผมที่ผสานเป็นมากง่ายและปัญหาฟรีด้วยhgและกว่าที่พวกเขาจะมีgitsvn svnผสานกับsvn(อย่างน้อยรุ่นที่เราใช้) สร้างความขัดแย้งที่มีนัยสำคัญซึ่งต้องแก้ไขด้วยตนเอง

หนึ่งในเหตุผลที่การผสานนั้นยากกว่าใน SVN ก็คือมันมีเพียงสองตัวเลือกสำหรับแต่ละบรรทัดที่แตกต่างกัน

  • ข้อความจากสาขาที่คุณกำลังผสานเข้า
  • ข้อความจากสาขาที่คุณรวมเข้าด้วยกัน

ในขณะที่การผสานจาก DVCS โดยทั่วไปจะให้ตัวเลือกที่สามซึ่งก็คือ

  • ข้อความจากบรรพบุรุษร่วมกันของทั้งสองสาขาที่คุณกำลังผสาน

ไม่ประมาทเพียงวิธีการที่เป็นประโยชน์คือมันช่วยให้คุณมีมากบริบทที่ดีกว่าสำหรับการเปลี่ยนแปลงกว่าวิธีที่ง่ายสอง diff สามารถ

สรุปฉันขอแนะนำให้คุณลองดู ด้วยเครื่องมือเช่นgitsvnและhgsubversionคุณยังสามารถลองพวกเขาออกมาพร้อมกับ Repos

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


1
SVN จะไม่ขัดแย้งกันในกรณีที่คุณพูดถึงเช่นกัน มันจะปรากฏขึ้นเมื่อคุณทั้งคู่เปลี่ยนบรรทัดเดียวกันเท่านั้น การรวมกันเป็นปัญหาที่เกิดขึ้นกับการเปลี่ยนชื่อไฟล์ / ย้ายหรือเพิ่ม / ลบใน svn เพราะมันไม่รองรับการเปลี่ยนแปลงของไดเรกทอรีที่ผสานกัน SVN ผสานให้คุณมากกว่า 2 ตัวเลือกฉันมักจะใช้ "ใช้พวกเขาแล้วขุด" ตามที่คุณต้องการเก็บการเปลี่ยนแปลงทั้งสองชุดโดยไม่ลบทั้งคู่!
gbjbaanb

@gbjbaanb - at least the version I've usedนั่นไม่ใช่สิ่งที่ฉันได้พบซึ่งเป็นเหตุผลที่ผมมีคุณสมบัติประสบการณ์ของฉันกับ ความเข้าใจของฉันคือรุ่นล่าสุดของ svn ไม่เข้าใจเกี่ยวกับบรรพบุรุษร่วมกัน แต่ฉันไม่มีประสบการณ์ในเรื่องนั้นและฉันสงสัยว่ามีเซิร์ฟเวอร์จำนวนมากที่เปิดใช้งาน svn รุ่นเก่าซึ่งมีปัญหาเดียวกัน
Mark Booth

บังเอิญฉันรักความจริงที่ว่าด้วยhg(และเกือบจะแน่นอนgitแต่ฉันไม่ได้ลอง) คุณสามารถใช้ไฟล์ที่มีสามคลาสแบ่งเป็นสามไฟล์ด้วยแต่ละคลาสจากนั้นผสานการเปลี่ยนแปลงระหว่างสาขากับ ไฟล์ 'ที่รวมกัน' และสาขาที่มีไฟล์แยกต่างหากเช่นกันซึ่งการเปลี่ยนแปลงในแต่ละคลาสจะถูกนำไปใช้กับไฟล์ที่ถูกต้อง เวทมนต์บริสุทธิ์ * 8 ')
มาร์กบูธ

1
gbjbaanb ถูกต้อง; SVN จะไม่มีความขัดแย้งในสถานการณ์ที่คุณอธิบาย มันค่อนข้างง่ายที่จะแสดงให้เห็นถึงตัวคุณเอง
Jeremy

@Jeremy @gbjaanb - ส่วนที่แก้ไขทำงานได้ดีขึ้นสำหรับคุณหรือไม่ ฉันจะไม่เถียงกับคุณเกี่ยวกับวิธีการsvnผสานทำงานอย่างไรฉันมีประสบการณ์ของตัวเองกับsvnบรรทัดคำสั่งและ SVNKit ภายใต้ Eclipse ที่เพียงดึงการปรับปรุงสามารถส่งผลให้ 'ขัดแย้ง' ซึ่งจะต้องแก้ไขด้วยตนเองด้วยการตัดและวาง (ฉันไม่สามารถพูดได้อย่างง่ายดายว่า 'ฉันต้องการการเปลี่ยนแปลงทั้งสองนี้ตามลำดับนี้)
Mark Booth

0

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

แต่ที่จริงแล้วฉันยังไม่ได้ย้ายออกจากการโค่นล้ม ฉันแค่ใช้ git เป็นลูกค้าในพื้นที่ของฉัน

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