กระบวนการที่แนะนำสำหรับการตรวจสอบโค้ดด้วย Mercurial


18

โดยทั่วไปเราใช้ Perforce และ SmartBear's Code Collaborator ที่Big Corpและตอนนี้เรากำลังจะใช้ Mercurial สำหรับบางโครงการ

การทำงานร่วมกันของรหัสสนับสนุน Mercurial (เรากำลังใช้รุ่น 5) และฉันกำลังพยายามที่จะกำหนดเวลาที่ดีที่สุด (ในระหว่างกระบวนการส่ง / ส่งเซิร์ฟเวอร์) เป็นเวลาที่ดีที่สุด / มีประสิทธิภาพสำหรับการตรวจสอบรหัส

ขอบคุณ


คุณควรแยกคำถามสองข้อนี้ออก (a) เป็นของที่นี่ แต่ (b) อาจเป็นของ stackoverflow หรือ serverfault
blueberryfields

ขอบคุณ @blueberryfields ฉันแก้ไขปัญหาได้จริงปัญหาคือไฟล์ bin / hg.cmd อยู่ในพา ธ และไม่มี exe
cbrulak

คำตอบ:


22

ที่จริงแล้วเราเพิ่งผ่านสิ่งที่ บริษัท ของฉันเกือบจะเหมือนกัน นี่คือสิ่งที่เราทำ:

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

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

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

  1. นักพัฒนาเริ่มผลักดันไปยังที่เก็บที่มั่นคง (ใช่นี่คือขั้นตอนแรกจริงๆ)
  2. hook จะเรียกใช้และหยิบรายการชุดการเปลี่ยนแปลงทั้งหมดที่มีอยู่ในรายการ (โดยเรียกใช้บันทึก HG) จากนั้นจะทำการสืบค้นฐานข้อมูลที่เราสร้างขึ้นเพื่อดูว่ามีการรวมชุดการแก้ไขเหล่านั้นในการตรวจสอบรหัสหรือไม่ (ตารางตรงกับแฮชของเซ็ตการแก้ไขที่มีรหัสตรวจสอบรหัส)
    • หากนี่เป็นครั้งแรกที่มีการเห็นการเปลี่ยนแปลงเหล่านี้เราจะสร้าง Code Review ใหม่ (โดยใช้บรรทัดคำสั่ง Code Collaborator) จากนั้นบันทึกการเปลี่ยนแปลงเหล่านี้ในฐานข้อมูลด้วยรหัสของการตรวจสอบรหัสนั้น
    • หากเราเห็นชุดการเปลี่ยนแปลงบางส่วน (แต่ไม่ใช่ทั้งหมด) เราจะเรียกใช้คำสั่ง (ตัวทำงานร่วมกันของรหัส) เพื่อแนบชุดการเปลี่ยนแปลงใหม่กับการตรวจสอบที่มีอยู่และบันทึกการเปลี่ยนแปลงใหม่เหล่านี้ในฐานข้อมูล
    • หากพบการเปลี่ยนแปลงทั้งหมดในฐานข้อมูล (เช่นการเปลี่ยนแปลงทั้งหมดนั้นถูกเพิ่มลงในการตรวจสอบโค้ด) จากนั้นเราจะตรวจสอบว่าสถานะการตรวจสอบรหัสนั้นเสร็จสมบูรณ์ อย่างไรก็ตามหากมีการเปลี่ยนแปลงใหม่ ๆ (หรือการตรวจสอบโค้ดไม่สมบูรณ์) เบ็ดออกด้วยรหัสสถานะที่ไม่เป็นศูนย์ (ทำให้ Mercurial ย้อนกลับธุรกรรม) และส่งข้อความที่เป็นมิตรกับข้อผิดพลาดมาตรฐานที่อธิบายถึงนักพัฒนา การตรวจสอบรหัสจะต้องเสร็จสิ้น

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

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


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

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

1
ว้าว. ฉันสามารถทำงานให้คุณได้ไหม
Rich

@Ryan - เราจะใช้งาน hook ของ pretxnchangegroup ได้อย่างไรลิงก์ที่คุณระบุไม่ได้ให้คำอธิบายโดยละเอียดเกี่ยวกับวิธีการนำไปใช้งานไม่ได้ให้ประเภทของฟังก์ชั่นเทมเพลตที่เราควรทำตาม ฉันไม่มีประสบการณ์หลาม โปรดคุณเปลี่ยนเส้นทางฉันไปยังแหล่งข้อมูลที่ถูกต้องหรือแม่แบบสำหรับ pretxnchangegroup hook Ta
Simple-Solution

2

ขึ้นอยู่กับว่าคุณมีโครงสร้างที่เก็บข้อมูลอย่างไรและคุณพยายามทำอะไรให้สำเร็จ เราชอบที่จะทำรีวิว "pre-commit" ซึ่งในโลกของ DVCS หมายถึง "pre-push" อย่างแท้จริง DVCS นั้นดีกว่าในสภาพแวดล้อมนี้ (เมื่อเปรียบเทียบกับ SCM แบบดั้งเดิม) เนื่องจากมีฟังก์ชันการทำงานในตัวสำหรับบันทึกการเปลี่ยนแปลงในท้องถิ่นของคุณและทำให้พื้นที่ทำงานของคุณกลับมาเพื่อให้คุณสามารถทำงานอย่างอื่นได้

หากคุณต้องการแสดงความคิดเห็นหลังการโพสต์เวิร์กโฟลว์ในอุดมคติขึ้นอยู่กับโครงสร้างที่เก็บของคุณเป็นอย่างมาก ตัวอย่างเช่นสมมติว่าโครงสร้างพื้นที่เก็บข้อมูลที่มีลักษณะเช่นใดอย่างหนึ่งที่กล่าวถึงในบทความนี้ในรูปแบบที่เก็บ Git ในกรณีนี้คุณอาจต้องการตรวจสอบการเปลี่ยนแปลงที่ถูกรวมเข้าdevelopด้วยกัน ความมุ่งมั่นของแต่ละบุคคลในสาขาคุณลักษณะอาจไม่เหมาะสมที่จะตรวจสอบ เห็นได้ชัดว่าทุกคนhotfixesต้องได้รับการตรวจสอบควบคู่ไปกับการรวมเข้าmasterด้วยกัน

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

สำหรับ b) สิ่งเดียวที่ฉันอยากจะแนะนำคือการส่งอีเมลไปที่ฝ่ายสนับสนุนของ SmartBear (support@smartbear.com) โดยตรง เราจะ (ใช่ฉันทำงานให้กับ SmartBear) ยินดีที่จะช่วยคุณแก้ไขปัญหาเส้นทางของคุณ แต่คำถามนี้มีข้อมูลไม่เพียงพอที่จะแก้ไขปัญหาของคุณ กระบวนการปกติคือเพียงเรียกใช้ตัวติดตั้งและทุกอย่างก็ใช้ได้ เห็นได้ชัดว่ามีบางอย่างผิดพลาดในกระบวนการนั้น

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