ดึงการเปลี่ยนแปลงจากต้นแบบไปยังสาขาที่ทำงานของฉันหรือไม่


16

เราสองคนกำลังทำงานกับบางสิ่งอยู่ เรากำลังใช้โครงสร้างสาขานี้

  • เจ้านาย
  • dev-A
  • dev-B

เราทั้งคู่ทำงานแยกสาขา (dev-A, B) และเมื่อใดก็ตามที่เราทำเราส่งเสริมการเปลี่ยนแปลงของเราเป็นหลัก

แต่ข้อเสียเปรียบของเรื่องนี้คือเราไม่สามารถเปลี่ยนแปลงสิ่งที่นักพัฒนาคนอื่นทำ ทุกอย่างมีอยู่ในทรีหลัก - แต่เราไม่สามารถรับอัปเดตล่าสุดที่นักพัฒนาคนอื่นทำ

มีวิธีแก้ไขปัญหานี้หรือไม่หรือเราควรจะเปลี่ยนโครงสร้างสาขาของเรา (ต่อคุณสมบัติ)?

คำตอบ:


16

ฉันเห็นสาขานักพัฒนาซอฟต์แวร์ที่ใช้ในสองสถานการณ์หลัก:

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

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

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

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

ปัจจุบันฉันเป็นส่วนหนึ่งของกลุ่มผู้มีส่วนร่วมประมาณ 35 คนแบ่งออกเป็น 4 ทีมคนส่วนใหญ่เช็คอินอย่างน้อยวันละ 2-3 ครั้งบางคน 10-15 ครั้ง; เป็นเรื่องผิดปกติที่จะเห็นงานสร้างที่เสียหายและหายากมากสำหรับพวกเขาที่จะไม่สามารถใช้งานได้นานกว่าสองสามนาที Git จัดการกับการควบรวมกิจการได้อย่างง่ายดายส่วนใหญ่เวลาที่สาขานักพัฒนาระยะไกลเป็นเพียงค่าใช้จ่ายที่ไม่จำเป็น เพียงดึงรวมภายในเครื่องแล้วทำการทดสอบก่อนที่จะผลักดันมันง่ายมาก

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

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

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


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

15

ในสาขาที่ทำงานของคุณถ้าคุณไป:

git commit -am "Committing changes before merge"
git merge master

คุณสามารถรวมจากสาขานักพัฒนาอื่น ๆ

git checkout dev-A
git merge dev-B

สิ่งที่จะทำคือผสานการเปลี่ยนแปลงต้นแบบกับสาขาการพัฒนาของคุณ


ใช่ - นั่นเป็นวิธีหนึ่ง ฉันหวังว่าคอมไพล์จะมีเวิร์กโฟลว์ที่สง่างามสำหรับสิ่งนี้
Utkarsh Sinha

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

Perfecto มีคำตอบที่ยาวมากสำหรับคำถามที่แน่นอนนี้ในบางสถานที่ แต่git merge masterในขณะที่สาขาฟีเจอร์การชำระเงินออกเป็นสิ่งที่ฉันกำลังมองหา ขอบคุณ
Drenai

3

หาก dev-A และ dev-B เป็นสาขาที่แตกต่างกันสำหรับโครงการที่แตกต่างกันสิ่งที่ @scaryrawr ตอบจะดีที่สุด

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

จากนั้นคุณสามารถทำตามวิธีการมาตรฐานเพื่อให้งานสำเร็จใน devWork กลับไปที่อาจารย์เป็นต้น

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