รหัสชั่วคราวควรอยู่ภายใต้การควบคุมเวอร์ชันและอย่างไร


29

นี่คือตัวอย่างของรหัสชั่วคราว / ท้องถิ่น มันเป็นสิ่งจำเป็นในการทำงานกับ codebase แต่จะเป็นอันตรายต่อการเป็นส่วนหนึ่งของมัน:

  1. ไฟล์โครงการ อาจจำเป็นต้องแก้ไขพา ธ เพื่อให้แสดงเลย์เอาต์บนพีซีปัจจุบัน
  2. makefiles ตัวอย่างเช่นการปรับให้เหมาะสมอาจต้องปิดในระหว่างการดีบัก แต่ไม่ใช่สำหรับเซิร์ฟเวอร์ CI
  3. แฮ็กสกปรกน่าเกลียด ตัวอย่างเช่นreturn 7ในช่วงกลางของฟังก์ชั่นเพื่อทดสอบบางสิ่งบางอย่างขึ้นอยู่กับฟังก์ชั่นและสงสัยว่าจะทำลายที่ 7 หรือ 7 เป็นรหัสของปุ่มยังไม่ได้ใช้ที่ฉันกำลังใช้และต้องทดสอบตลอด ชีวิตของสาขาของฉัน

ฉันได้พยายามรักษาผู้ที่อยู่ในคอมไพล์กระทำที่ฉันมักจะ rebase ไปด้านบนก่อนที่จะผลักดันไป repo HEAD~และผลักดันแล้ว สิ่งนี้ค่อนข้างไม่สะดวกและไม่สามารถทำงานกับ svn ได้ Stashing ทำให้ฉันกลัวยิ่งขึ้น - "ฉันจำได้หรือไม่ว่าฉันจะโผล่ขึ้นมาหลังจากกด?"

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

อะไรจะเป็นทางออกที่มีสติสำหรับรหัสการโยนทิ้งเช่น?


รหัสชั่วคราวนี้จะต้องมีการอัพเดทจากโครงการเดิมในช่วงระยะเวลาการใช้งานชั่วคราวหรือไม่?
JeffO

@JeffO ไม่แน่ใจว่าฉันเข้าใจคุณหรือไม่ ตัวอย่างโค้ดสกปรกนั้นมีขนาดเล็กและไม่ค่อยเกิดปัญหากับโค้ดภายใต้การพัฒนา อย่างไรก็ตาม @ Blrfl มันอันตรายมากสำหรับพวกเขาที่จะเข้าร่วมในกระแสหลัก ลองนึกภาพreturn 7ในtrunkตอนเย็นวันศุกร์หลังจากรวมหมัดในฤดูร้อน
Vorac

@Vorac - นั่นคือความคิดเห็นและการทดสอบโค้ดสำหรับ! ฉันสามารถแสดงให้คุณแย่กว่านั้น - รหัสที่ใช้งานไม่ได้แม้ว่ามันจะดูดีในแวบแรก Return 7.. ถ้าเพียงพวกเขาทั้งหมดเห็นได้ชัด!
gbjbaanb

@Vorac: นั่นเป็นข้อคิดเห็นทางปรัชญามากกว่าสิ่งอื่นใด
Blrfl

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

คำตอบ:


46

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

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

การควบคุมเวอร์ชันไม่ใช่ที่เก็บสิ่งประดิษฐ์หรือระบบจัดเก็บเอกสาร มันเกี่ยวกับการถือประวัติศาสตร์ของการเปลี่ยนแปลง ติดทุกสิ่งที่คุณต้องการภายในวันหนึ่งคุณอาจต้องการดูว่ามันคืออะไรและนั่นคือวันที่คุณตระหนักถึงสิ่งที่ SCM ของคุณเป็นจริงเกี่ยวกับ

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


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

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

2
ฉันจะพิมพ์โปสเตอร์ขนาดใหญ่ว่า "รหัสทั้งหมดเป็นชั่วคราว" และติดไว้บนผนัง อาจเป็นใน Comic Sans
Bob Tway

2
@ MattThrower ในการอ้างฟองมาจากริมฝีปากของ Clippy?
gbjbaanb

1
รหัสที่ไม่ทำงานหรือรหัสที่ไม่ได้คอมไพล์ไม่ควรผูกมัดกับการควบคุมเวอร์ชัน
Tulains Córdova

17

ไฟล์โครงการ อาจจำเป็นต้องแก้ไขพา ธ เพื่อให้แสดงเลย์เอาต์บนพีซีปัจจุบัน

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

makefiles ตัวอย่างเช่นการปรับให้เหมาะสมอาจต้องปิดในระหว่างการดีบัก แต่ไม่ใช่สำหรับเซิร์ฟเวอร์ CI

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

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

คุณไม่สามารถเขียนการทดสอบที่ทำให้เกิดกรณีความล้มเหลวที่น่าสงสัยได้หรือไม่?

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


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

@Vorac ฉันจะตรวจดู hooks การโค่นล้มซึ่งให้คุณเรียกใช้สคริปต์เมื่อทำ มันควรจะเป็นไปได้ที่จะเขียนสคริปต์ที่ปฏิเสธการผสานถ้ามันมี XXX หรืออะไรทำนองนั้น
Winston Ewert

1
@Vorac: หากคุณใช้ TortoiseSVN คุณสามารถใช้ Restore After Commit บนไฟล์เพื่อคอมมิทบางส่วนใช้เครื่องมือ diff หรือโปรแกรมแก้ไขของคุณเพื่อลบบล็อกที่คุณไม่ต้องการให้ทำการคอมมิท Tortoise จะกู้คืนไฟล์เต็มหลังจากนั้นและคุณสามารถส่งบล็อกที่เหลือหากพร้อม สิ่งนี้สามารถทำได้โดยทำการสำรองข้อมูลไฟล์อย่างรวดเร็วและเรียกคืนหลังจากกระทำครั้งแรก
leokhorn

5

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

ซึ่งหมายความว่า:

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

  • ไฟล์ในเครื่องที่เหมาะสมกับเครื่องบางเครื่องอาจถูกเก็บไว้ในสาขา

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

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

    คอยดูโอกาสในการลบลักษณะเฉพาะระหว่างเครื่อง มันอาจหมายถึง:

    • ให้สิทธิ์เข้าถึงเซิร์ฟเวอร์ dev SQL เพื่อแทนที่อินสแตนซ์ในเครื่องของนักพัฒนาซอฟต์แวร์

    • การใช้บริการกระจายแพคเกจเช่นPypiหรือnpmสำหรับแพ็คเกจสาธารณะและคู่หูส่วนตัวของพวกเขาสำหรับแพ็คเกจภายในองค์กร

    • ขอให้สมาชิกของทีมติดตั้งซอฟต์แวร์เวอร์ชันเดียวกัน

    • ทำให้การอัปเดตซอฟต์แวร์โปร่งใสที่สุด

    • หรือทำให้เป็นไปได้ในการปรับใช้ระบบปฏิบัติการและซอฟต์แวร์ที่จำเป็นบนเครื่องได้ในคลิกเดียว (รวมถึงเวลาสำหรับนักพัฒนาซอฟต์แวร์ทุกคนในการติดตั้ง Vim vs. Emacs, Chrome vs. Firefox, ฯลฯ )

ดังนั้น:

ไฟล์โครงการ อาจจำเป็นต้องแก้ไขพา ธ เพื่อให้แสดงเลย์เอาต์บนพีซีปัจจุบัน

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

ตัวอย่าง:

ในโครงการที่สร้างด้วย Visual Studio คุณอาจพบ:

  • ตัวไฟล์เอง เส้นทางการเป็นญาติมันไม่สำคัญว่าในเครื่องของฉันโครงการตั้งอยู่ในH:\Development\Hello World Project\ขณะที่สมาชิกคนอื่น ๆ C:\Work\HelloWorld\ของทีมออกตรวจสอบโครงการลง

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

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

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

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

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

makefiles ตัวอย่างเช่นการปรับให้เหมาะสมอาจต้องปิดในระหว่างการดีบัก แต่ไม่ใช่สำหรับเซิร์ฟเวอร์ CI

รักษาหลาย makefiles ในการควบคุมเวอร์ชัน ไม่ผิดปกติในการสร้างเวอร์ชันการดีบักบนเซิร์ฟเวอร์ CI เช่นกันและส่งไปยังไคลเอนต์ที่พบข้อบกพร่องที่ยุ่งยาก

แฮ็กสกปรกน่าเกลียด ตัวอย่างเช่นคืนค่า 7 ระหว่างฟังก์ชันเพื่อทดสอบบางอย่างขึ้นอยู่กับฟังก์ชันและสงสัยว่าจะแตกที่ค่า 7

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

ตามที่คุณอธิบายคุณควรเขียนข้อสอบ ตัวอย่างเช่นหากคุณต้องการแน่ใจว่า:

class TemperatureConverter
{
    public int CelsiusToFahrenheit(int temperature)
    {
        ...
    }
}

โยนข้อยกเว้นเมื่อtemperatureเป็นรองAbsoluteZeroค่าคงที่คุณไม่ควรเล่นด้วยรหัสเอง ให้สร้างการทดสอบหน่วยที่จะ:

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

2
น่าเสียดายที่ฉันไม่มีประสบการณ์ในการเขียนข้อสอบ แพลตฟอร์มปัจจุบันเกี่ยวข้องกับซีพียู ARM การกำหนดค่าฮาร์ดแวร์บางอย่างเพื่อตอบสนองต่อคำสั่ง USB ไม่มีการตอบกลับจากฮาร์ดแวร์ถึง cpu
Vorac

2
หากรหัสชั่วคราวอาจมีผลกระทบถาวรแม้ว่าจะไม่จำเป็นต้องใช้รหัสเมื่อได้รับผลกระทบเหล่านั้นแล้วฉันก็คิดว่าการเก็บรหัสไว้ที่ใดที่หนึ่งจะฉลาดในกรณีที่มีคำถามว่าผลกระทบนั้นได้รับอย่างถูกต้องหรือไม่ ตัวอย่างเช่นหากบางรูปแบบฐานข้อมูลสำหรับผลิตภัณฑ์มีการเปลี่ยนแปลงในขณะที่อยู่ในการพัฒนาหนึ่งอาจเขียนยูทิลิตี้ one-off อย่างรวดเร็วเพื่อเปลี่ยนรูปแบบ ยูทิลิตี้อาจไม่จำเป็นหลังจากแปลงฐานข้อมูลที่มีอยู่ในรูปแบบเก่าเท่านั้น แต่อาจจำเป็นต้องตรวจสอบว่าการแปลงเสร็จสิ้นแล้ว
supercat

สำหรับไฟล์โครงการ Visual Studio ฉันมีประสบการณ์ที่ดีในการสร้างมันด้วย CMake ซึ่งช่วยให้เกิดความยืดหยุ่นเกี่ยวกับวิธีที่ซอร์สโค้ดและโค้ดที่คอมไพล์อยู่ในระบบไฟล์ จากนั้นฉันจะควบคุมไฟล์อินพุต CMake แทนไฟล์ VS project แต่สิ่งนี้ยังคงเป็นไปตาม dictum ของคุณ "การควบคุมเวอร์ชันควรมีรหัสและการกำหนดค่าที่จำเป็นในการสร้างแอปพลิเคชัน" ฉันเห็นด้วยอย่างสมบูรณ์!
David K

ด้วย VS บางครั้งคุณจะต้องดูแลให้แน่ใจว่าคุณไม่ได้มีเส้นทางที่แน่นอนในด้อมผมเคยขับรถเป็นมากกว่าปัญหาไม่กี่ที่มีการอ้างอิง busted เมื่ออัพเกรด Win64 และมีห้องสมุดสำหรับแพลตฟอร์มของบุคคลที่ 3 ย้ายจาก. C:\Program Files\...ไปC:\Program Files (x86)\...
Dan Neely

@DanNeely: นั่นคือเหตุผลที่ NuGet ควรจัดการห้องสมุดของบุคคลที่สาม
Arseni Mourzenko

2

เราใช้ @@ความคิดเห็นในรหัสเพื่อระบุสิ่งที่ยังไม่พร้อมสำหรับการทดสอบ ฯลฯ

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

เราทำการค้นหาทั่วโลก@@เพื่อป้องกัน 'ของเหลือ' ก่อนเข้าสู่ขั้นตอนสุดท้ายของการทดสอบเบต้าเป็นต้น

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


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

ฉันยังใช้@@nameเพื่อระบุปัญหาที่ฉันต้องหารือกับ 'ชื่อ'


1

2 โซลูชั่นแฮมสเตอร์:

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

  • ตัวเลือกอื่นสำหรับตัวอย่างใน C คือการใช้ #ifdef HAMSTER จากนั้นโค้ดจะทำงานเฉพาะบนเครื่องของคุณที่คุณมีธงคอมไพเลอร์ HAMSTER


0

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

แม้จะมีหนามแหลมสำหรับhttp://www.extremeprogramming.org/rules/spike.htmlเช่นเดียวกับที่คุณอธิบายไว้ เราแค่โฮสต์พวกมันไว้ในต้นไม้ย่อยอื่น


0

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

  1. กิ่งก้านที่มีน้ำหนักเบาสามารถถูกบีบอัดได้

    Git ยอดเยี่ยมในเรื่องนี้ แฮกที่สาขาทำการคอมมิชชันมากมายจากนั้นทำการ rebase หรือสควอชประวัติของคุณเพื่อแก้ไขเสียง

  2. ใช้คิวการแก้ไขที่ด้านบนของ SCM ของคุณ

    ฉันมักจะพบว่าตัวเองกำลังใช้StGitเพื่อลอยแพตช์ไปที่ด้านบนสุดของสาขาปัจจุบันของฉัน เมื่อฉันทำกับสาขาฉันสามารถป๊อปอัพพวกเขากลับออกจากกองก่อนที่จะรวมการบีบหรือการรีบูตหรือฉันสามารถผสานพวกเขาใน codebase หลักถ้าฉันต้องการให้พวกเขารอบ

  3. ใช้RCSเป็น SCM แบบ "ไม่อยู่ในย่านความถี่" สำหรับการทดลองขนาดเล็ก

    บางครั้งคุณเพียงต้องการตรวจสอบไฟล์ที่กำลังดำเนินการในแบบใช้แล้วทิ้งโดยไม่ต้องล้างประวัติในภายหลัง ปกติฉันจะใช้ RCS สำหรับภายใน Git หรือ SVN ฉันบอกให้ Git เพิกเฉยสิ่งประดิษฐ์ RCS ตรวจสอบงานของฉันที่กำลังดำเนินการใน RCS และเมื่อฉันชอบผลลัพธ์ที่ฉันเพิ่งโยน*,vไฟล์หรือไดเรกทอรี RCS ทั้งหมด อย่าทำงานgit clean -fdxหรือคล้ายกันจนกว่าคุณจะได้มอบหมายงานให้กับ SCM "ของจริง" ของคุณหรือคุณจะเสียใจ

  4. ชื่อหยุดพัก

    อีก Git-ism แต่ก็มีประโยชน์: git stash save --include-untracked <some-cool-title>สามารถเป็นประโยชน์ในการบีบ คุณสามารถบันทึก, pop และนำไปใช้ในการทำงานในความคืบหน้าด้วยวิธีนี้และดูจุดตรวจต่างๆของคุณผ่านหรือgit stash list git reflog --allSCM อื่น ๆ อาจมีคุณสมบัติที่คล้ายกัน แต่ระยะทางของคุณอาจแตกต่างกันมากกับอันนี้


0

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

อย่างน้อยคุณควรมีอิสระในการยุ่งเกี่ยวกับสาขาฟีเจอร์ใด ๆ จนกว่าพวกเขาจะพร้อมที่จะรวมเข้ากับมาสเตอร์ / ลำต้น

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


0

ฉันเชื่อว่าบางระบบจะส่งคำเตือนเมื่อเห็นสิ่งที่ต้องทำในความคิดเห็นดังนั้น

// TODO: remove this hack.

อาจเป็นสิ่งที่จำเป็นถ้าคุณสามารถหาตัวเลือกที่เกี่ยวข้องในบางส่วนของสภาพแวดล้อมการพัฒนาของคุณหรือเพียงติดคำสั่ง grep บางประเภทใน buildfile ของคุณ มันอาจจะเป็นไปได้ที่จะจัดเรียง// HACKหรือสตริงใด ๆ ที่จะหยิบขึ้นมา

วิธีนี้ง่ายกว่าการจัดระเบียบโค้ดของคุณในลักษณะเฉพาะและหวังว่าผู้คนจะจำไม่ได้ว่าจะต้องใช้มัน นอกจากนี้ยังทำให้การปฏิบัติตามคำแนะนำของ @gbjbaanb ปลอดภัยยิ่งขึ้น (หากคุณมั่นใจได้ว่าทุกคนเห็นคำเตือน!)

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


0

ไม่เป็นอันตรายต่อการใส่รหัสในการควบคุมแหล่งที่มา

ทุกรายการที่คุณพูดถึงควรอยู่ในการควบคุมแหล่งที่มา

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