ในโฟลว์ GitHub มันตกลงหรือไม่ที่จะแยกสาขาฟีเจอร์ในสาขาฟีเจอร์อื่น?


22

เราใช้GitHub ไหลในโครงการของเราและส่วนใหญ่เวลาที่เราเปิดสาขาคุณลักษณะใหม่จากต้นแบบ , ทำงานบางอย่างมีเปิด PR ตรวจสอบรหัสและการผสานกลับเข้าไปในต้นแบบ

feature-branch-Aแต่การทำงานในปัจจุบันของฉันขึ้นอยู่กับปัญหาที่กำลังทำงานอยู่ในการควบคุม มันเป็นโคเชอร์ที่จะสร้างสาขาของฉันจากสาขาอื่นหรือต่อต้านวิญญาณของ GitHub Flow หรือไม่?

ทางเลือกอื่นคือการยึดสาขาของฉันไว้ที่หลักและผสานการเปลี่ยนแปลงจากfeature-branch-A(บ่อยครั้ง)

ต้องการตัวเลือกใดในโฟลว์ GitHub?

คำตอบ:


24

นี่คือขั้นตอนการทำงานที่ฉันติดตามเมื่อฉันแยกสาขาจากสาขาคุณลักษณะ:

  1. สร้างfeature-branch-Bจากfeature-branch-A
  2. ทำงานกับ feature-branch-B
  3. หากมีการเพิ่มการคอมมิชชันให้กับfeature-branch-Aหลังการแยกให้รีบูตfeature-branch-Bเข้าสู่feature-branch-A
  4. ทำงานเสร็จสิ้นในfeature-branch-Bและรอจนกว่าจะถูกกลืนเข้าไปfeature-branch-Amaster
  5. หลังจากfeature-branch-Aรวมเข้าด้วยกันให้masterรีบูตfeature-branch-Bเข้าสู่master
  6. รวมfeature-branch-Bเข้ากับmaster

ด้วยการติดตามเวิร์กโฟลว์ด้านบนจะปรากฏว่าคุณแยกจากmasterหลังจากfeature-branch-Aถูกรวมเข้าด้วยกัน คุณไม่จำเป็นต้องรอจนกว่ามีรวมที่จะเริ่มต้นการทำงานในfeature-branch-A feature-branch-Bแต่คุณจะได้รับประวัติที่สะอาดปราศจากต้นไม้ที่ซับซ้อน


นี่คือคำตอบที่ฉันต้องการ! คุณช่วยให้ฉันปวดหัวในการแยกออกขอบคุณ!
Vance Palacio


8

ฉันคิดว่านี่จะโอเคถ้าคุณสร้างฟีเจอร์ที่ฟีเจอร์อื่น

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


7

สิ่งสำคัญที่ความมุ่งหมายของ git-flow คือความสามารถในการให้เหตุผลเกี่ยวกับบทบาทของสาขาที่กำหนดและสิ่งที่แยกออกมาจาก

ตามหลักการแล้วทุกสาขาผสานกลับไปที่ codeline ที่รวมเข้าด้วยกัน โดยทั่วไปจะเป็นการรวมจากการฉีด (ในคอมไพล์ไหลนี่คือdev) แยกสาขาสาขาและรวมจาก dev ปล่อยสาขาและผสานจาก dev (พร้อมกับการรวมเพิ่มเติมmaster) สาขาฮอตฟิกซ์และผสานจากต้นแบบ (พร้อมผสานเพิ่มเติมกลับไปที่ dev)

codeline แต่ละสาขาจะแยกจากกันและรวมกลับไปที่พาเรนต์ codeline อาจดึงรหัสจาก codelines อื่น ๆ ได้ตลอดเวลาหากจำเป็น

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

  1. สาขาจากคุณสมบัติ
  2. สำรวจความคิด
  3. ผสานคุณสมบัติ

สิ่งที่คุณต้องการหลีกเลี่ยงคือสิ่งที่มีลักษณะ:

  1. สาขาจากคุณสมบัติที่จำเป็น
  2. ทำงานกับรหัส
  3. ผสานจาก dev เมื่อคุณลักษณะที่ต้องการเสร็จสมบูรณ์
  4. ตรวจสอบการทำงาน (และการผูกพันเพิ่มเติม) ในสาขาฟีเจอร์
  5. รวมเข้ากับ dev

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

อย่างไรก็ตามหากนี่เป็นคุณสมบัติใหม่ที่ขึ้นอยู่กับรหัสที่ยังไม่พบใน dev การไหลควรเป็น:

  1. สาขาจาก dev
  2. ผสานจากคุณสมบัติที่จำเป็น
  3. ทำงานกับรหัส
  4. ผสานจาก dev เมื่อคุณลักษณะที่ต้องการเสร็จสมบูรณ์
  5. ตรวจสอบการทำงาน (และการผูกพันเพิ่มเติม) ในสาขาฟีเจอร์
  6. รวมเข้ากับ dev

โปรดทราบว่าสิ่งนี้เริ่มต้นด้วยสาขาจาก dev และลงท้ายด้วย merge to dev

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

  1. สาขาจาก dev
  2. ทำงานกับรหัส
  3. ผสานจาก dev เมื่อคุณลักษณะที่ต้องการเสร็จสมบูรณ์
  4. ตรวจสอบการทำงาน (และการผูกพันเพิ่มเติม) ในสาขาฟีเจอร์
  5. รวมเข้ากับ dev

นี่เป็นชุดของสาขาและรหัสที่เสถียรที่สุด

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


ในขั้นตอนชุดที่สามของคุณข้อเสียคือขั้นตอนที่ 1 จำเป็นต้องมี "การกระทำจำลอง" ในสถานการณ์ของฉันฉันไม่มีประโยชน์อะไรที่จะกระทำจนกว่าrequired-featureจะถูกรวมเข้าด้วยกัน
Borek Bernard

ฉันยังคงชี้ไปว่ามันเป็นหนึ่งในบทความที่ชื่นชอบในการแยกทาง: ขั้นสูง SCM กิ่งกลยุทธ์ ในขณะที่มันมุ่งเน้นไปที่ระบบการควบคุมเวอร์ชันรวมศูนย์ความคิดของบทบาทที่นำเสนอแผนที่ตรงกับ git-flow

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

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

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

1

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

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

ที่กล่าวว่าไม่มีกฎที่เข้มงวดกับมัน นี่เป็นเพียงรูปแบบและแนวทางปฏิบัติที่ดีที่สุด

แก้ไข: พลาดคำถามบางส่วน การรวมสาขาคุณลักษณะไว้ในของคุณเองซึ่งยึดตามหลักไม่ได้หลีกเลี่ยงปัญหาใด ๆ ที่กล่าวถึงข้างต้นและอาจสร้างประวัติศาสตร์ที่ซับซ้อนยิ่งขึ้น

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

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