คุณควรดูที่คอมไพล์ไหล มันเป็นรูปแบบการแตกแขนงที่ยอดเยี่ยม
สรุปการไหลของ Git
การแตกแขนง
ลำต้นหลักที่อยู่รอบ ๆ ตลอดไปคือdevelop
และmaster
. master
ถือรุ่นล่าสุดของคุณและdevelop
ถือสำเนาการพัฒนา "มั่นคง" ล่าสุดของคุณ
ผู้สนับสนุนสร้างfeature
สาขา (นำหน้าด้วยfeature/
แบบแผน) จากdevelop
:
$ git checkout -b feature/my-feature develop
และhotfix
สาขา (นำหน้าด้วยhotfix/
การประชุม) จากmaster
:
# hotfix the latest version of master
$ git checkout -b hotfix/hotfix-version-number master
# or hotfix from a specific version
$ git checkout -b hotfix/hotfix-version-number <starting-tag-name>
กิ่งไม้เหล่านี้เป็น "แบบใช้ครั้งเดียว" ซึ่งหมายความว่าพวกมันมีอายุการใช้งานสั้นก่อนที่พวกมันจะรวมกลับไปที่ลำต้นหลัก มีไว้เพื่อหุ้มฟังก์ชั่นชิ้นเล็ก ๆ
สาขาการตกแต่ง
เมื่อผู้มีส่วนร่วมทำกับfeature
สาขาพวกเขารวมมันกลับเข้าไปในdevelop
:
$ git checkout develop
$ git merge --no-ff feature/my-feature
$ git branch -d feature/my-feature
เมื่อพวกเขาทำกับhotfix
สาขาพวกเขารวมมันกลับเข้าไปในทั้งสองmaster
และdevelop
ดำเนินการแก้ไขด่วน:
$ git checkout master
$ git merge --no-ff hotfix/hotfix-version-number
$ git checkout develop
$ git merge --no-ff hotfix/hotfix-version-number
$ git branch -d hotfix/hotfix-version-number
นี่คือด้านการรวมอย่างต่อเนื่อง
ข่าว
เมื่อคุณพร้อมที่จะเริ่มต้นการบรรจุหีบห่อคุณสร้างrelease
สาขาจากสาขา "เสถียร" ของคุณdevelop
(เช่นเดียวกับการสร้างfeature
สาขา) จากนั้นคุณชนหมายเลขรุ่นในแท็ก (อธิบายไว้ด้านล่าง)
การใช้release
สาขาแยกช่วยให้คุณสามารถพัฒนาฟีเจอร์ใหม่ต่อไปdevelop
ในขณะที่คุณแก้ไขข้อบกพร่องและเพิ่มสัมผัสการตกแต่งให้กับrelease
สาขา
เมื่อคุณพร้อมที่จะเสร็จสิ้นการปล่อยคุณรวมrelease
สาขาในทั้งสองmaster
และdevelop
(เช่นเดียวกับhotfix
) เพื่อให้การเปลี่ยนแปลงทั้งหมดของคุณดำเนินต่อไป
แท็ก
เมื่อคุณสร้างrelease
สาขาหรือhotfix
สาขาคุณจะชนหมายเลขเวอร์ชันอย่างเหมาะสมในแท็ก ด้วย vanilla git ที่มีลักษณะเช่นนี้:
$ git tag -a <tag-name> -m <tag-description>
จากนั้นคุณจะต้องผลักดันแท็ก (แยกต่างหาก) ไปยังที่เก็บระยะไกลของคุณ:
$ git push --tags
มันมักจะดีที่สุดที่จะใช้เวอร์ชันความหมายmajor.minor.hotfix
ซึ่งในรุ่นของคุณจะนำรูปแบบ การกระแทกที่สำคัญจะย้อนกลับเข้ากันไม่ได้ในขณะที่การกระแทกเล็กน้อยและการแก้ไขด่วนจะไม่เข้ากันได้ย้อนหลัง (ยกเว้นว่าคุณอยู่ในรุ่นเบต้า0.x.x
)
การผสม
ดังที่คุณเห็นด้านบน git-flow สนับสนุนให้คุณรวมสาขาด้วยคำสั่งต่อไปนี้:
$ git merge --no-ff <branch-name>
--no-ff
ตัวเลือกที่ช่วยให้คุณรักษาประวัติศาสตร์ของสาขาของคุณโดยไม่ต้องออกพวงของสาขาโกหกรอบในปัจจุบันกระทำของพื้นที่เก็บข้อมูล (ดังนั้นไม่ต้องกังวลคุณจะไม่ได้มีสาขาทุกรุ่น)
คุณยังได้รับการสนับสนุนที่จะดึงออกมาด้วย
$ git pull --rebase
ดังนั้นคุณจะไม่เพิ่มการรวมที่ไร้ประโยชน์จำนวนมาก
.gitconfig
คุณสามารถกำหนดค่าคอมไพล์จะทำทั้งสองสิ่งเหล่านี้โดยเริ่มต้นในของคุณ ฉันจะให้คุณดูอย่างนั้น;)
กำลังดูรุ่น
เมื่อใครบางคนกำลังมองหา codebase ของคุณพวกเขาสามารถเช็คเอาต์แท็กด้วยชื่อ:
# checkout in detached HEAD to browse
$ git checkout <tag-name>
# OR checkout and create a new local branch (as you might for a hotfix)
$ git checkout -b <new-branch-name> <tag-name>
หรือหากมีใครบางคนกำลังเรียกดูบน GitHub นอกจากนี้ยังมีแท็บ "แท็ก" ในเมนูแบบเลื่อนลง "สาขา"
ใช้ส่วนขยาย git-flow (แนะนำ)
วิธีที่ฉันโปรดปรานในการใช้โมเดลนี้คือส่วนขยาย git flowสำหรับ git
( แก้ไข:หลุยส์ได้แนะนำส้อม AVHซึ่งทำงานได้ดีขึ้นgit describe
และอาจใช้งานได้มากขึ้นในขณะนี้ขอบคุณ Louis
ส่วนขยายจะทำให้ส่วนที่ยุ่งทั้งหมดโดยอัตโนมัติ (เช่นการใช้merge --no-ff
และการลบสาขาหลังจากการรวม) เพื่อให้คุณสามารถดำเนินชีวิตต่อไปได้
ตัวอย่างเช่นด้วยส่วนขยายคุณสามารถสร้างสาขาคุณลักษณะดังนี้:
$ git flow feature start my-feature-name
และทำมันให้จบ
$ git flow feature finish my-feature-name
คำสั่งสำหรับโปรแกรมแก้ไขด่วนและการเปิดตัวจะคล้ายกันแม้ว่าพวกเขาจะใช้หมายเลขรุ่นแทนชื่อสาขาเช่น:
# Create hotfix number 14 for this minor version.
$ git flow hotfix start 2.4.14
# Create the next release
$ git flow release start 2.5.0
จากนั้น Git flow จะสร้างแท็กเวอร์ชันสำหรับคุณและขอเตือนให้คุณชนเวอร์ชันในไฟล์กำหนดค่าหรือไฟล์ Manifest (ซึ่งคุณสามารถทำได้กับตัวจัดการงานอย่าง Grunt)
หวังว่าจะช่วย :) ฉันไม่แน่ใจว่าคุณจะรวมทุกอย่างเข้ากับการตั้งค่า Travis CI ของคุณได้อย่างไร แต่ฉันคิดว่า githooks จะพาคุณไปที่นั่น