เคยตกลงใช้รหัสไม่ทำงานหรือไม่?


40

เป็นความคิดที่ดีหรือไม่ที่ต้องส่งรหัสการทำงานเท่านั้น?

การมอบหมายนี้ไม่จำเป็นต้องออกจากที่เก็บในสถานะใช้งานเป็น:

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

    1. ไฟล์ท้องถิ่น
    2. การจัดเตรียมพื้นที่
    3. มุ่งมั่นในสาขาท้องถิ่น
    4. กระทำในสาขาคุณสมบัติส่วนบุคคลระยะไกล
    5. ผสานกับdevelopสาขาระยะไกล
    6. ผสานกับmasterสาขาระยะไกล
    7. ผสานกับreleaseสาขาระยะไกล
  • ... กระทำก่อนกำหนดกระทำบ่อย ๆ

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


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


ฉันประหลาดใจกับคำตอบที่ยอดเยี่ยมมากมาย! พวกเขานำฉันไปสู่ข้อสรุปว่าฉันไม่ชำนาญในการใช้สาขาเพื่อจัดระเบียบโค้ดของฉัน


28
ในสาขาท้องถิ่นทุกอย่างไป กระทำสิ่งที่คุณต้องการ ทำความสะอาดก่อนที่จะดัน
Joachim Sauer

@Joachim Sauer ผมถามเกี่ยวกับการปฏิบัติที่ดีที่สุดและเหตุผลที่อยู่เบื้องหลังพวกเขาเพื่อที่จะสร้างนิสัยที่ดี ปัจจุบันฉันมักจะใช้รหัสที่ไม่สมบูรณ์ และการคืนกลับเป็นฝันร้ายโดยผ่านการผูกมัดนับสิบวันในช่วงสองสามวันที่ผ่านมา
Vorac

9
หากคุณพัฒนาแต่ละฟีเจอร์ในสาขาของตัวเองการตัดสินใจนั้นสำคัญ: ทิ้งสาขาให้ดำเนินการต่อจากสาขาใหม่ที่สร้างขึ้นบนต้นแบบปัจจุบัน
Joachim Sauer

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

1
"ทำไม? ค่าของการกระทำผิดคืออะไร" ความสามารถในการระบุปัญหาและทดสอบวิธีแก้ปัญหาที่แตกต่างกันหลายประการด้านบนและสามารถกลับไปที่ปัญหาที่คุณรู้ว่าคุณมีได้อย่างน่าเชื่อถือมากกว่าสถานะที่คุณได้รับสิ่งนั้นและอาจมีบางอย่างใหม่ .
Joshua Taylor

คำตอบ:


20

หนึ่งในปรัชญาการแยกสาขา (ส่วนการพัฒนากลยุทธ์การแยกสาขาและนโยบาย Codeline ในกลยุทธ์การแยกย่อยของ SCM ขั้นสูง - ยังอ่านแนวทางปฏิบัติที่ดีที่สุดของ Perforce Bestซึ่งเป็นไฟล์ PDF แต่มีรายละเอียดอื่น ๆ ) คือสาขาของคุณเกี่ยวกับนโยบาย

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

(จาก Perforce Best Practices)

สมมติว่าคุณมีสาขา 'ปล่อย' (หรือ 'ต้นแบบ') ซึ่งสร้างรุ่นและ 'ลำต้น' (หรือ 'dev') ซึ่งนักพัฒนาตรวจสอบรหัสทำงาน นี่คือนโยบายของสาขา การสังเกต 'รหัสทำงาน' เป็นส่วนหนึ่งของนโยบายสาขา 'dev' เราไม่ควรส่งรหัสที่เสียหายไปยังสาขา dev บ่อยครั้งมีสิ่งต่าง ๆ เช่นเซิร์ฟเวอร์ CI ที่เชื่อมโยงกับสาขาเหล่านี้และการตรวจสอบในรหัสที่แตกหักไปยัง dev สามารถทำให้สาขาของทุกคนสับสนและทำลายการสร้าง

อย่างไรก็ตามมีบางครั้งที่ควรตรวจสอบรหัสบางส่วนที่ไม่สามารถใช้งานได้ ในกรณีเหล่านี้เราควรแยกสาขา - นโยบายที่เข้ากันไม่ได้กับ trunk ในสาขาใหม่นี้เราสามารถตัดสินใจได้ว่านโยบาย ('รหัสที่ใช้งานไม่ได้') แล้วส่งรหัสให้

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

(จาก Perforce Best Practices)

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

ดังนั้นสาขาพูดว่าสาขานี้สามารถมีรหัสที่แตกสลายและกระทำไป


40

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


2
มันเป็นสิ่งที่สวยงามอย่างแน่นอน ฉันไม่คิดว่าชุมชนได้เรียนรู้ที่จะชื่นชมคอมไพล์และ DVCS โดยทั่วไป
ChaosPandion

5
ตราบใดที่ผู้คนไม่สับสนปรัชญานี้ด้วยการเขียนโปรแกรมทดลองและข้อผิดพลาดซึ่งควรหลีกเลี่ยง
Pieter B

10

ใช่ตราบใดที่ไม่ใช่สาขาย่อย

ในสาขาส่วนบุคคลทุกอย่างดำเนินไปและสามารถถูกยกเลิกได้หากการทดลองไม่ทำงาน นั่นคือหนึ่งในประโยชน์หลักของ DVCS: อิสรภาพ

มูลค่าของการยอมรับรหัสที่เสียหาย?: การทำงานร่วมกันและการทดลอง


ผู้เยาว์ปรับแต่ง: ใช่ตราบใดที่มันจะไม่ถูกผลิต รหัสที่ถูกซ่อนไว้โดยสลับคุณสมบัติตัวอย่างเช่น
Rob Crawford

5

ใช่มันก็โอเคและมันเป็นสิ่งที่ฉันทำมาก

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

แนวทางปฏิบัติของฉันคือ:

  • เขียนแบบทดสอบก่อน
  • wip (ความคืบหน้าในการทำงาน) กระทำได้ดี
  • กระทำบ่อยครั้ง (หลายครั้งภายในหนึ่งวัน) และเร็ว (บันทึก 'กำลังทำงาน' ขั้นตอน)
  • ผลักดันทุก ๆ การกระทำ (ในกรณีที่ฮาร์ดไดรฟ์ของคุณเกิดปัญหา / บัสกระทบคุณ)
  • ทำงานในสาขาก่อนเสมอ
  • เมื่อเป็นไปได้เพียงผสานรหัสการทำงานเป็นหลักเท่านั้น
  • การรีบูตแบบโต้ตอบในคอมไพล์เพื่อสควอช Wips ก่อนที่จะรวมต้นแบบ

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

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

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

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


3

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


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

แม้กระทั่งใน DVCS การกระทำมีค่าบางอย่างเนื่องจากรหัสในมัน "ถาวรมากขึ้น" จากนั้นหนึ่งในไฟล์ อย่างน้อยก็สำหรับคอมไพล์
Joachim Sauer

3
@ThomasOwens ด้วยความเคารพทุกประการหากผู้ดูแลระบบ DVCS ของคุณตั้งค่าระบบของคุณเพื่อไม่ให้สำรองที่เก็บหรือสาขาในพื้นที่ผู้ดูแลระบบ DVCS ของคุณเป็นคนงี่เง่าและต้องการหางานใหม่ที่เหมาะสมกับความสามารถของเขามากขึ้น ("คุณต้องการ มันทอดด้วยเหรอ? ") หากผู้ดูแลระบบ DVCS ของคุณทำเช่นนั้นเพราะฝ่ายไอทีของคุณบอกให้เขาทำเช่นนั้นนั่นก็เพื่อองค์กรด้านไอทีของคุณเช่นกัน หากมีสิ่งใดสิ่งนี้ถือเป็นข้อกล่าวหาเกี่ยวกับแนวคิด DVCS ทั้งหมด: การส่งรหัสไปยัง VCS ควรตามความ หมายหมายถึงการยืนยันการสำรองข้อมูลอัตโนมัติ
John R. Strohm

6
@ JohnR.Strohm เมื่อเดินทางฉันมักจะ จำกัด การเข้าถึงเครือข่ายดังนั้นฉันจึงไม่สามารถเข้าถึงทรัพยากรสำรองหรือไดรฟ์เครือข่ายใด ๆ ฉันกำลังพัฒนาโดยไม่มีการสำรองข้อมูลจนกว่าฉันจะสามารถเข้าถึงเครือข่ายได้ นี่คือจุดของ DVCS - คุณไม่ต้องการเครือข่าย repo ของคุณควรสำรองไว้หรือไม่ อาจเป็นไปได้ แต่มันเป็นเพียงความต้องการสำหรับการปล่อยหรือ repos ต้นแบบ คุณไม่ควรไปหลายวันระหว่างการกดไปยัง repo ที่สำรองไว้ แต่การกดเหล่านั้นไม่ควรเป็นรหัสที่ใช้งานไม่ได้
Thomas Owens

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

3

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

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

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

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


3

ก่อนที่คุณจะเริ่มรับความคิดเกี่ยวกับวิธีการทำงานกับการควบคุมเวอร์ชันของคุณมันคุ้มค่าที่จะคิดว่าทำไมคุณถึงทำงานกับการควบคุมเวอร์ชัน

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

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

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

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


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

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

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

2

สาขาสร้าง / วางจำหน่าย

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

สาขาอื่น ๆ : บันทึกรัฐบ่อยครั้ง

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

ลองพิจารณาตัวอย่างเหล่านี้ที่สถานะที่บันทึกไว้ให้ประโยชน์ที่สำคัญ:

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

0

การคอมมิทโค้ดฐานเสียบางตัวก็โอเคตราบใดที่มันยังอยู่ในโลคอล

ทำไม?

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

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

  1. เวลาที่ใช้กับคุณสมบัติเพิ่มเติมตอนนี้ใช้เวลาแก้ไขข้อผิดพลาด ...
  2. การพัฒนาไม่เป็นไปตาม ...
  3. สินค้าไม่ถูกส่งตรงเวลา

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


0

ฉันไม่คิดว่ามันโอเคที่จะยอมรับรหัสที่ใช้งานไม่ได้

จะเกิดอะไรขึ้นถ้า

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

  • มีคนอื่นเริ่มทำงานในสาขาเดียวกันโดยไม่ทราบว่าคุณได้ทำรหัสผิดพลาด พวกเขาอาจกำลังไล่ล่า 'ปลาเฮอริ่งแดง' โดยคิดว่าการเปลี่ยนแปลงของพวกเขามีบางอย่างเสียหาย

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

  • มีคนปรับใช้ 'รหัสที่ใช้ไม่ได้' หรือไม่ นี่อาจเป็น 'เกม' ถ้าคุณกำลังทำงานกับข้อมูลส่วนบุคคลหรือผู้ให้บริการการชำระเงิน

ตอบกลับไปที่ @WarrenT

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


downvote ไม่มีสถานการณ์เหล่านี้หากคุณใช้เวิร์กโฟลว์ DVCS มาตรฐาน
user16764

1
ด้วยเวิร์กโฟลว์ git (หรือ DVCS อื่น ๆ ) นักพัฒนาซอฟต์แวร์กำลังทำงานในสาขาสาขาในท้องถิ่นไม่ใช่ลำต้นหลัก คำถามต่อไปน่าจะเป็นนักพัฒนาซอฟต์แวร์ที่เคยผลักดันรหัสที่ใช้งานไม่ได้ไปยังที่เก็บข้อมูลอื่น นี่เป็นเรื่องของทีมที่มีความเข้าใจว่าสาขาใดมีไว้เพื่ออะไรและใช้ความคิดเห็นที่ดีในการกระทำของคุณ การแก้ไขด่วนจะทำในสาขาที่วางจำหน่ายเท่านั้น แน่นอนไม่มีใครควรผสานรหัสที่ใช้งานไม่ได้ ทีมต้องมีกฎเกี่ยวกับเวิร์กโฟลว์ แต่สิ่งที่ทำในที่เก็บในเครื่องเป็นเรื่องที่แตกต่างอย่างสิ้นเชิง
WarrenT

ฉันคิดว่ามีความแตกต่างระหว่าง "รหัสที่ไม่ทำงาน" (สิ่งที่ OP ถาม) และ "รหัสที่ใช้ไม่ได้" ที่คุณอ้างถึง
Simon

@WarrenT โปรดดูคำตอบ
CodeART

-1

คำถามบางข้อที่จะช่วยคุณพิจารณาว่าการยอมรับรหัสไม่ทำงานหรือไม่:

  1. คุณทำงานหนักเกินไปหรือไม่?
  2. เพื่อนร่วมทีมของคุณทำลายการสร้างหรือไม่
  3. รหัสของคุณเป็นระเบียบและดูเหมือนว่าจะไม่เลวร้ายลง?

หากคุณตอบตกลงกับข้อใดข้อหนึ่งข้างต้นแสดงว่าใช่คุณสามารถส่งรหัสที่ไม่ทำงานได้

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

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