คุณควรดูที่คอมไพล์ไหล มันเป็นรูปแบบการแตกแขนงที่ยอดเยี่ยม
สรุปการไหลของ 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 จะพาคุณไปที่นั่น