Jon Purdy มีความคิดที่ถูกต้อง ทำให้การบริหารจัดการที่เกิดขึ้นจริงในสาขาเหล่านี้ได้ง่ายเช่นกันและการจัดการสาขาการโต้แย้งสำหรับการย้ายไปgit flowgit
ขอเริ่มต้นด้วยบทสรุปพื้นฐานของgitตั้งแต่คุณมาจากsvn-to- gitมุมมอง พิจารณาในgitสิ่งต่อไปนี้:
master--...............-.....-..............-
\ / / /
---develop---------............../
\ /
--feature---
ด้านบนคุณแยกmasterไปที่develop(แสดงโดย\) และแยกdevelopไปที่featureสาขา เรารวมสาขาเหล่านั้นกลับมา (แสดงโดย/) ด้วยคอมมิชชัน ( -) ตามสาขา (ถ้าไม่มีการคอมมิชชัน แต่การผสานเป็นวิธีที่ถูกต้องมี.ตัวบ่งชี้ที่แสดงว่าการถัดไป-เป็นการคอมมิทถัดไป)
ง่ายพอสมควร เกิดอะไรขึ้นถ้าเรามีโปรแกรมแก้ไขด่วนในรุ่นหลักของเรา
master--...............-.....-................-...........-.........-
\ / / / \ /| /
\ / / / -hotfix-- V /
---develop---------............../..............-...----
\ / \ V /
--feature--- --feature2...----
ข้างต้นแยกจากdevelop masterข้อผิดพลาดที่พบในการmasterได้รับการแก้ไขโดยการแตกแขนงจากการแก้ไขมันและกลับเข้ามาในการควบรวมกิจการmaster masterจากนั้นเราก็รวมmasterเข้ากับdevelopและจากนั้นdevelopเข้าสู่feature2ซึ่งรีดรหัสใหม่จากhotfixในสาขาเหล่านี้
เมื่อคุณผสานfeature2กลับไปที่developประวัติศาสตร์รวมกับdevelop hotfixในทำนองเดียวกันdevelopจะถูกรวมเข้าfeature2กับรหัสใหม่จากmasterดังนั้นการรวมdevelopกลับไปmasterจะเกิดขึ้นโดยไม่ต้องผูกปมเพราะมันขึ้นอยู่กับความมุ่งมั่นในmasterเวลานั้น - ราวกับว่าคุณแยกจากmasterจุดนั้น
ดังนั้นนี่เป็นอีกวิธีในการทำเช่นนั้น
master--..........-........-
\ /\ /
---1.0-- --1.1--
1.0 รีลีสของคุณจะถูกแท็1.0.1ก1.0.2— 1.0.3,, และอื่น ๆ
ต่อไปนี้เป็นเคล็ดลับ: คุณพบข้อบกพร่องใน 1.0 และมีผลกับ 1.1, 1.2 และ 1.3 คุณทำอะไร?
คุณแยกสาขาออกเป็นรุ่นล่าสุดหรือรุ่นที่เก่าที่สุดและทำการแก้ไข จากนั้นคุณผสานใหม่hotfixสาขาเข้า1.3และอื่นเข้า1.2, และ1.1 1.0อย่าแยกสาขาจากเวอร์ชันการบำรุงรักษาแต่ละสาขา อย่ารวม1.0เข้าmasterหรือผสานmasterเข้า1.0ด้วยกัน นำhotfixสาขาเดียวและรวมเข้าไปในสาขาเวอร์ชันทั้งหมดของคุณ หากมีความขัดแย้งก็จะบอกคุณ ตรวจสอบรหัสของคุณเพื่อให้แน่ใจว่าการเปลี่ยนแปลงนั้นถูกต้อง ( git diffคือเพื่อนของคุณ)
ตอนนี้การเปลี่ยนแปลงที่เฉพาะเจาะจงถูกนำไปใช้ทุกที่ เชื้อสายจะแตกแขนง แต่ก็ไม่เป็นไร มันไม่ได้เป็นคนจับจด แท็ก1.3หัวเป็น 1.3.17 รวมเข้ากับคุณลักษณะทั้งหมดที่อยู่ระหว่างดำเนินการแยกจาก1.3และไปต่อ
git flowขยายช่วยจัดการการบำรุงรักษาคุณลักษณะและสาขาแก้ไขด่วนเหล่านี้สำหรับคุณ เมื่อคุณลดขั้นตอนการทำงานลงได้สิ่งนี้เป็นเรื่องเล็กน้อยและใช้เวลาจำนวนมากในการจัดการซอร์สโค้ด
ฉันเคยเห็นสิ่งนี้ทำในทีมการเขียนโปรแกรม แต่ฉันไม่ได้ทำงานอย่างลึกซึ้งในฐานะโปรแกรมเมอร์เองดังนั้นฉันจึงยังคงได้รับความสนใจจากงานประจำวันต่อวัน
gitแท็กโดยอัตโนมัติหลังจากแต่ละบิลด์ที่สำเร็จหรือไม่ สิ่งนี้จะมีข้อได้เปรียบเพิ่มเติมที่ทำให้ชัดเจนว่าการคอมมิชชันgitมีปัญหาในการสร้างหรือทดสอบความล้มเหลวเนื่องจากจะไม่มีการติดแท็ก