Jon Purdy มีความคิดที่ถูกต้อง ทำให้การบริหารจัดการที่เกิดขึ้นจริงในสาขาเหล่านี้ได้ง่ายเช่นกันและการจัดการสาขาการโต้แย้งสำหรับการย้ายไปgit flow
git
ขอเริ่มต้นด้วยบทสรุปพื้นฐานของ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
มีปัญหาในการสร้างหรือทดสอบความล้มเหลวเนื่องจากจะไม่มีการติดแท็ก