คุณจะจัดการกับการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ ที่คุณต้องการทำให้เกิดความเป็น Mercurial ได้อย่างไร


9

ฉันกำลังพิจารณาที่จะโอนย้ายคลังเก็บ CVS อายุ 14 ปี (ประวัติไม่เป็นอันตราย) ไปยัง Mercurial ฉันคิดว่าฉันมีบิตการแปลงทางเทคนิคหมดลง แต่ฉันยังมีคำถามบางอย่างเกี่ยวกับการทำงานอย่างมีประสิทธิภาพใน Mercurial

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

คำตอบ:


5

ฉันจัดการด้วยวิธีนี้:

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

แนวคิดคือที่เก็บข้อมูลระยะไกลมีเฉพาะรุ่นที่ได้รับการทดสอบของโครงการของฉัน


3
คุณพบว่าที่เก็บข้อมูลระยะไกลของคุณได้รับความยุ่งเหยิงด้วยประเภท "แก้ไขข้อบกพร่องในการส่งครั้งล่าสุด" หรือไม่?
nmichaels

4

มีสองสิ่งที่ฉันจะเพิ่ม

หนึ่งคือการแนะนำขั้นตอนการทำงานที่ทำให้การใช้เหตุผลของดองซึ่งเรือเป็นมาตรฐานกับTortoiseHg

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

ถ้าฉันมีการเปลี่ยนแปลงที่ค่อนข้างถาวรบอกว่าฉันต้องการไฟล์การกำหนดค่าบนเครื่องพัฒนาชี้ไปที่ localhost พอร์ต 3333 มากกว่าเซิร์ฟเวอร์ที่ใช้งานจริงจากนั้นฉันก็จะใช้ส่วนเสริม Mercurial Queues ซึ่งมาพร้อมกับMercurialและTortoiseHg .


4

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

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

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

หากคุณพร้อมที่จะย้ายการเปลี่ยนแปลงไปคุณมีตัวเลือกอีกชุดหนึ่ง สิ่งที่ง่ายที่สุดคือใช้hg diffกับไฟล์เพื่อสร้างชุดข้อมูลแก้ไขซึ่งคุณเก็บไว้ในที่ที่ปลอดภัยจากนั้นhg patch --no-commitนำไปใช้ชุดปะแก้ใหม่เมื่อคุณต้องการให้การเปลี่ยนแปลงกลับมา คุณสามารถทำให้ราบรื่นขึ้นได้โดยติดตั้งส่วนขยาย shelve , attic extensionหรือญาติอื่น ๆ คุณสามารถใช้ส่วนขยายของคิวได้ด้วย แต่นั่นคือการใช้ค้อนขนาดใหญ่เพื่อแคร็กอ่อนนุช คุณสามารถทำได้แม้กระทั่งยอมรับการเปลี่ยนแปลงจากนั้นอัปเดตกลับไปที่ผู้ปกครองและทำงานอื่นที่นั่นปล่อยให้การเปลี่ยนแปลงในสาขาที่ไม่ระบุชื่อที่ไม่ระบุชื่อ - hg commit -m 'temporary branch' && hg up $(hg log -r 'parents(.)' --template '{node}')(แม้ว่ามันจะง่ายกว่าที่จะทำด้วยตนเอง!) จากนั้นคุณจะต้องระวังอย่าผลักดันเซ็ตการแก้ไขนั้น


3

มีวิธีการพื้นฐานสองวิธีในการแยกการพัฒนา

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

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


ดูเหมือนว่ามีใครบางคนที่ทำหน้าที่ในการรวมบิตเข้าด้วยกัน ฉันไม่อยากเพิ่ม mq ลงในรายการสิ่งใหม่ ๆ ที่ผู้คนจะต้องเรียนรู้ทันที แต่ฉันจะคิดถึงความเกลียดชังครั้งแรกของฉันต่อแนวคิดของสาขาที่มีชื่อ มันอาจจะไม่ได้รับการพิสูจน์อย่างดี
nmichaels

สำหรับกระสุนนัดที่สองของคุณทำไมไม่ทำโคลนทำงานและผลักเมื่อทำเสร็จแล้ว? MQ ฟังดูมีวิธีซับซ้อนที่นี่
TheLQ

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