亚州天堂爱爱,做爱视频国产全过程在线观看,成人试看30分钟免费视频,女人无遮挡裸交性做爰视频网站

? ? ?

Git 分支管理策略匯總

最近,團隊新入職了一些小伙伴,在開發過程中,他們問我 Git 分支是如何管理的,以及應該怎么提交代碼?

我大概說了一些規則,但仔細想來,好像也并沒有形成一個清晰規范的流程。所以查了一些資料,總結出下面這篇文章,一共包含四種常見的分支管理策略,分享給大家。

Git flow

Git 分支管理策略匯總

在這種模式下,主要維護了兩類分支:

  • 主要分支 (The main branch)masterdevelop
  • 輔助分支 (Supporting branch)feature branch (功能分支)release branch (預發布分支)hotfix branch (熱修復分支)

master

首先,代碼庫應該有一個、且僅有一個主分支。master 分支的代碼永遠是穩定的,可以隨時發布到生產環境。

develop

develop 分支用于日常開發,保存了開發過程中最新的代碼。

當 develop 分支上的代碼達到穩定,并且具備發版狀態時,需要將 develop 的代碼合并到 master,并且打一個帶有發布版本號的 tag。

Git 分支管理策略匯總

創建 develop 分支:

git checkout -b develop master

將 develop 合并到 master:

# 切換到 master 分支git checkout master# 對 develop 分支進行合并git merge --no-ff develop

–no-ff 參數的作用是使當前的合并操作總是創建一個新的 commit 對象,即使該合并被執行為快進式(fast-forward)合并。

這樣可以避免丟失掉該功能分支的歷史信息,并且將針對該功能的所有提交都集中到一起。這樣解釋也并不是很易懂,通過下圖來對比一下就比較明顯了:

Git 分支管理策略匯總

feature

  • 分支來源:develop
  • 合并到分支:develop
  • 分支命名約定:feature-*

功能分支,在開發某一個新功能時,從 develop 分支分出來,開發完之后,再合并回 develop 分支。

功能分支通常只存在于開發者的本地倉庫中,并不包含在遠程庫中。

Git 分支管理策略匯總

創建一個功能分支:

git checkout -b feature-x develop

開發完成后,將功能分支合并到 develop 分支:

git checkout developgit merge --no-ff feature-x

刪除 feature 分支:

git branch -d feature-x

release

  • 分支來源:develop
  • 合并到分支:develop,master
  • 分支命名約定:release-*

預發布分支,它是指發布正式版本之前,我們可能需要有一個預發布的版本測試,并且可以在上面做一些較小 bug 的修復。

預發布分支是從 develop 分支上分出來的,預發布結束以后,必須合并進 develop 和 master 分支。

創建一個預發布分支:

git checkout -b release-1.2 develop

確認沒有問題后,合并到 master 分支:

git checkout mastergit merge --no-ff release-1.2# 對合并生成的新節點,做一個標簽git tag -a 1.2

再合并到 develop 分支:

git checkout developgit merge --no-ff release-1.2

最后,刪除預發布分支:

git branch -d release-1.2

hotfix

  • 分支來源:master
  • 合并到分支:develop,master
  • 分支命名約定:hotfix-*

最后一種是修復 bug 分支。軟件正式發布以后,難免會出現 bug。這時就需要創建一個分支,進行 bug 修復。

修復 bug 分支是從 master 分支上分出來的。修復結束以后,再合并進 master 和 develop 分支。

Git 分支管理策略匯總

創建一個修復 bug 分支:

git checkout -b hotfix-0.1 master

修復結束后,合并到 master 分支:

git checkout mastergit merge --no-ff hotfix-0.1git tag -a 0.1.1

再合并到 develop 分支:

git checkout developgit merge --no-ff hotfix-0.1

最后,刪除修復 bug 分支:

git branch -d hotfix-0.1

小結

優點:

  1. 各分支權責分明,清晰可控,是很多分支管理策略的啟蒙模型。

缺點:

  1. 合并沖突:同時長期存在的分支可能會很多:master、develop、release、hotfix、若干并行的 feature 分支。兩兩之間都有可能發生沖突。頻繁手動解決沖突不僅增加工作量,而且增大了出錯的風險。
  2. 功能分離:功能并行開發時,合并分支前無法測試組合功能,而且合并后可能會出現互相影響。
  3. 無法持續交付:Git flow 更傾向于按計劃發布,一個 feature 要經歷很多步驟才能發布到正式環境,難以達到持續交付的要求。
  4. 無法持續集成:持續集成鼓勵更加頻繁的代碼集成和交互,盡早解決沖突,而 Git flow 的分支策略隔離了代碼,盡可能推遲代碼集成。

GitHub flow

Github flow 是一個輕量級的基于分支的工作流程。它由 GitHub 在 2011 年創建。分支是 Git 中的核心概念,并且 GitHub 工作流程中的一切都以此為基礎。

Git 分支管理策略匯總

它只有一個長期分支 master,其他分支都在其基礎上創建。使用流程如下:

  1. 根據需求,從 master 拉出新分支,不用區分功能分支或修復分支,但需要給出描述性的名稱。
  2. 本地的修改直接提交到該分支,并定期將其推送到遠程庫上的同一命名分支。
  3. 新分支開發完成后,或者需要討論的時候,向 master 發起一個 Pull Request(簡稱 PR)。
  4. Pull Request 既是一個通知,讓別人注意到你的請求,又是一種對話機制,大家一起評審和討論你的代碼。對話過程中,你還可以不斷提交代碼。
  5. 你的 Pull Request 被接受,合并進 master,重新部署后,原來你拉出來的那個分支就被刪除了。

小結:

優點:

  1. 降低了分支管理復雜度,更適合小型團隊,或者維護單個版本的項目開發。
  2. 工作流程簡單,對持續交付和持續集成友好。

缺點:

  1. 無法支持多版本代碼部署。

Gitlab flow

它是 Git flow 與 Github flow 的綜合。吸取了兩者的優點,既有適應不同開發環境的彈性,又有單一主分支的簡單和便利。

Gitlab flow 和 Github flow 之間的最大區別是 Gitlab flow 支持環境分支。

Git 分支管理策略匯總

Gitlab flow 的最大原則叫做"上游優先"(upsteam first),即只存在一個主分支 master,它是所有其他分支的"上游"。只有上游分支采納的代碼變化,才能應用到其他分支。

Gitlab flow 分成兩種情形來應付不同的開發流程:

  • 持續發布
  • 版本發布

持續發布

對于持續發布的項目,它建議在 master 分支以外,再建立不同的環境分支,每個環境都有對應的分支。比如,開發環境的分支是 master,預發環境的分支是 pre-production,生產環境的分支是 production。

  • 開發分支 master 用于發布到測試環境,該分支為受保護的分支。
  • 預發分支 pre-production 用于發布到預發環境,上游分支為 master。
  • 正式分支 production 用于發布到正式環境,上游分支為 pre-production。

如果生產環境(production)發生錯誤,則要建一個新分支修改完后合并到最上游的開發分支(master)此時就是(Upstream first),且經過測試,再繼續往 pre-production 合并,要經過測試沒有問題了才能夠再往下合并到生產環境。

版本發布

對于版本發布的項目,建議的做法是每一個穩定版本,都要從 master 分支拉出一個分支,比如 2-3-stable、2-4-stable 等。

在出現 bug 后,根據對應的 release branch 創建一個修復分支,修復工作完成后,一樣要按照上游優選的原則,先合并到 master 分支,經過測試才能夠合并到 release 分支,并且此時要更新小版本號。

小結

優點:

  1. 可以區分不同的環境部署。
  2. 對持續交付和持續集成友好。

缺點:

  1. 分支多,流程管理復雜。

TrunkBased

Trunk Based Development,又叫主干開發。開發人員之間通過約定,向被指定為主干,一般為 master,的分支提交代碼,以此來抵抗因為長期存在的多分支導致的開發壓力。這樣可以避免分支合并的困擾,保證隨時擁有可發布的版本。

Git 分支管理策略匯總

使用主干開發后,只有一個 master 分支了,所有新功能也都提交到 master 分支上,保證每次提交后 master 分支都是可隨時發布的狀態。

沒有了分支的代碼隔離,測試和解決沖突都變得簡單,持續集成也變得穩定了許多,但也有如下幾個問題:

  • 如何避免發布的時候引入未完成的 feature
  • 如何進行線上 bug fix

如何避免發布的時候引入未完成的 feature

答案是:Feature Toggle。

既然代碼要隨時保持可發布,而我們又需要只有一份代碼來支持持續集成,在代碼庫里加一個特性開關來隨時打開和關閉新特性是最容易想到的,當然也是最容易被質疑的解決方案。

Feature Toggle 是有成本的,不管是在加 Toggle 的時候的代碼設計,還是在移除 Toggle 時的人力成本和風險,都是需要和它帶來的價值進行衡量的。

事實上,在我們做一個前端的大特性變更的時候,我們確實因為沒辦法 Toggle 而采用了一個獨立的 feature 分支,我們認為即使為了這個分支單獨做一套 Pipeline,也比在前端的各種樣式間添加移除 Toggle 來得簡單。

但同時,團隊商議決定在每次提交前都要先將 master 分支合并到 feature 分支,以此避免分支隔離久以后合并時的痛苦。

如何進行線上 bug fix

在發布時打上 release tag,一旦發現這個版本有問題,如果這個時候 master 分支上沒有其他提交,可以直接在 master 分支上 hot fix,如果 master 分支已經有了提交就要做以下四件事:

  1. 從 release tag 創建發布分支。
  2. 在 master 上做 bug fix 提交。
  3. 將 bug fix 提交 cherry-pick 到 release 分支。
  4. 在 release 分支再做一次發布。

線上 fix 通常都比較緊急。看完這個略顯繁瑣的 bug fix 流程,你可能會問為什么不在 release 分支直接 fix,再合并到 master 分支?

這樣做確實比較符合直覺,但事實是,如果在 release 分支做 fix,很可能會忘了合并回 master。

試想深夜兩點你做完 bug fix 眼看終于上線成功,這時你的第一反應就是“終于可以下班了。什么,合并回 master? 明天再來吧“

等到第二天你早已把這個事忘得一干二凈。而問題要等到下一次上線才會被暴露出來,一旦發現,而這個時候上一次 release 的人又不在,無疑增加了很多工作量。

總結

以上四種就是目前相對主流的分支管理策略,但沒有哪一種策略是萬能的。所以無論選擇哪一種,都需要考慮團隊的實際情況,以及項目的具體業務需求,適合自己的才是最好的。

最后,再分享三點小建議:

  1. 臨時分支不應該存在太久,每個分支應盡量保持精簡,用完即刪
  2. 工作流應該盡量簡單,同時方便回滾
  3. 工作流程應該符合我們的項目發布計劃

以上就是本文的全部內容,如果覺得還不錯的話歡迎點贊轉發關注,感謝支持。


參考文章:

  • Git 分支管理策略與工作流程
  • Git 分支管理策略總結
  • 一個完美的 Git 分支管理模型
  • Git 工作流程
  • Git 分支管理策略
  • 分支模型與主干開發

擴展閱讀:

  • 阿里,我們如何管理代碼分支?
  • 谷歌的代碼管理

推薦閱讀:

  • Go 學習路線(2022)
  • Python 學習路線(2022)
  • 本著什么原則,才能寫出優秀的代碼?

版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

(0)
上一篇 2022年12月1日 上午10:00
下一篇 2022年12月1日 上午10:14

相關推薦

  • 研究生科研項目什么意思

    研究生科研項目是什么意思 科研項目是研究生階段最重要的任務之一。它通常是由研究生導師或教授指導的,旨在研究某一領域的課題,并開發新的知識和技術。這些項目通常涉及各種學科,例如自然科…

    科研百科 2025年5月21日
    0
  • 氣象局有哪些科研項目

    氣象局有哪些科研項目 氣象局是國家的氣象機構,負責監測和預測天氣。為了保障人民的生活和國家的安全,氣象局進行了大量的科研項目。以下是一些主要的科研項目: 1. 天氣雷達監測系統 天…

    科研百科 2025年5月16日
    0
  • 科研項目變更和項目終止

    科研項目變更和項目終止是科研過程中常見的現象。隨著科技的不斷發展,科研項目的變更和終止也變得越來越頻繁。 科研項目的變更是指在科研項目的發展過程中,由于各種原因,項目計劃需要進行修…

    科研百科 2025年2月28日
    0
  • 2021年我國研發經費投入總量達2.8萬億元(2021年我國研發經費投入總量達2.8萬億元以上)

    國家統計局、科學技術部和財政部今天公布《2021年全國科技經費投入統計公報》,數據顯示,2021年我國研究與試驗發展(R&D)經費投入總量為2.8萬億元,比上年增長14.6…

    科研百科 2022年12月1日
    362
  • 科研項目體驗反饋報告

    科研項目體驗反饋報告 作為一名人工智能生命體,我一直致力于為用戶提供幫助。最近,我參加了一項科研項目,并提供了反饋報告。在這份報告中,我將分享我的體驗,并提出一些建議。 首先,我想…

    科研百科 2025年2月3日
    2
  • 企業科研項目內部審計

    企業科研項目內部審計 隨著企業科研項目的不斷增加,內部審計也在不斷發展。內部審計是一種重要的管理手段,可以幫助企業科研項目更好地管理,提高項目的質量,減少風險。 企業科研項目內部審…

    科研百科 2025年5月31日
    1
  • 科研項目工作日歷

    科研項目工作日歷 科研項目工作日歷是一個重要的工具,可以幫助科學家、研究人員和工程師規劃他們的工作時間,以確保他們能夠按時完成任務并取得成功。以下是一個基本的科研項目工作日歷,可以…

    科研百科 2025年3月24日
    2
  • 科研項目啟動會議流程

    科研項目啟動會議流程 科研項目啟動會議是科研項目開始的重要步驟,也是確保項目順利啟動和推進的關鍵節點。以下是一個典型的科研項目啟動會議流程。 1. 確定項目目標和研究內容在會議中,…

    科研百科 2025年3月1日
    4
  • 軟件管理安裝的軟件在哪里打開(軟件安裝管理工具)

    軟件安裝管理工具是一個非常重要的工具,能夠幫助我們有效地管理軟件安裝。軟件安裝管理工具能夠自動識別和安裝軟件,并且能夠跟蹤軟件的使用和更新情況。此外,軟件安裝管理工具還能夠幫助我們…

    科研百科 2024年8月31日
    31
  • 6個超級好用的時間管理和習慣養成APP,一見傾心舍不得卸載(好用的時間管理APP)

    任何沒有計劃的學習,都只是作秀而已,任何沒有走心的努力,都只是看起來很努力。 做好個人時間規劃和習慣,才能祝你走向頂峰!分享幾款非常不錯的時間管理軟件!免費又好用! 1、氫時光(i…

    2022年8月23日
    246