อะไรคือข้อดีของการใช้การแยกเป็นนักพัฒนาเดี่ยว?


117

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

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


14
ฉันขอโทษฉันยอมรับว่าฉันไม่ได้มีประสบการณ์มากในแบบจำลอง StackExchange แต่ฉันต้องเข้าใจว่า 'แนวปฏิบัติที่ดีที่สุด' หรือคำถามอื่น ๆ ที่ไม่มีคำตอบเดียวที่กำหนดขึ้นมาหรือไม่ อนุญาตให้พูดถึงไหม ฉันเห็นตัวอย่างตามความคิดเห็นมากมายของคำถามที่ถูกต้องที่คาดคะเนแม้จะอยู่ในส่วน 'เกี่ยวข้อง' ของคำถามนี้เช่นsoftwareengineering.stackexchange.com/questions/286928หรือsoftwareengineering.stackexchange.com/questions/132730
flatterino

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

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


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

คำตอบ:


199

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

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

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


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

42

การพัฒนาที่ยาวนาน

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

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

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

คุณสมบัติทดลอง

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


16

ฉันใช้เพื่อการบำรุงรักษาเว็บไซต์ที่สำคัญ ฉันเป็นผู้พัฒนา แต่เพียงผู้เดียว แต่ฉันมีผู้เชี่ยวชาญในการพัฒนาและออกสาขา

กระบวนการทำงานของฉันสำหรับการตั้งค่าไซต์มีลักษณะดังนี้:

  1. ทำให้สาขาหลักสามารถทำงานได้ กระทำการเริ่มต้น

  2. ชำระเงินพัฒนาสาขา อย่าทำอะไรเลยพัฒนาฟังก์ชั่นเป็นบัฟเฟอร์ทดสอบสำหรับการรวมเข้ากับต้นแบบ

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

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

   Master
     |
   Develop  - E
   / |  \  \
 A   B   C  D

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

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

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

พิจารณาสถานการณ์สมมตินี้: คุณเคยทำงานในสาขาหลักและคุณมี AwesomeCodeThing ™ในการทำงานที่ใบสาขาปริญญาโทของคุณในการผ่าตัดหัวใจแบบเปิดและ YugeBug ™ปรากฏขึ้นที่ต้องแก้ไขอย่างเร่งด่วนมิฉะนั้นหลายพันคนจะบ่นกับคุณเกี่ยวกับ BigProblems ™
วิธีเดียวในการแก้ไขปัญหาของคุณอย่างรวดเร็วในสถานการณ์ดังกล่าว

  1. ตรวจสอบการกระทำก่อนหน้าของคุณ
  2. ดูว่าการกระทำที่มั่นคงครั้งสุดท้ายของคุณเคยเกิดขึ้นเมื่อใด (การสาปแช่งเป็นทางเลือก)
  3. ย้อนกลับไปที่การกระทำที่
  4. ทำการแก้ไขผลักออกไปผลิต
  5. แก้ไขข้อขัดแย้งและปัญหาทั้งหมดที่คุณพยายามกลับสู่สถานะ AwesomeCodeThing ™
  6. ยอมแพ้ร้องไห้และเริ่มทำงานใหม่ (ไม่บังคับ)

หากคุณใช้สาขา:

  1. ชำระเงินหลัก
  2. สร้างสาขา UrgentFix ™และแก้ไขสิ่งต่าง ๆ
  3. ดึง UrgentFix ™ให้เป็นมาสเตอร์
  4. ผลักดันการผลิต
  5. ผสานต้นแบบเข้ากับการพัฒนา
  6. ผสานรวมเข้ากับ AwesomeCodeThing ™
  7. รับเบียร์และทำงานต่อไป

13
การรับเบียร์ก่อนดำเนินการต่อไม่ได้เป็นตัวเลือก
JamesB

4
@JamesB เดินทางเบียร์ก่อนที่จะเริ่มต้นไม่เป็นตัวเลือก :)
คริส Cirefice

4

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

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

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

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


2

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

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

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

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