[英]Git branching model strategy
我們有四個可以部署產品的服務器環境,每個服務器都有一個目的:開發,內部測試,外部測試和生產。
我們試圖盡可能簡化合並/沖突解決方案,因此我們創建了兩個不屬於gitflow模型的額外分支。
正常的gitflow分支
但這兩個分支也不標准,可能需要改變......
然后過程如下:
我們搞亂了整個gitflow模型嗎?
為了回答你的問題,不是你沒有弄亂gitflow模型 - 更多地擴展它以滿足你的需求。
通過將環境耦合到給定的分支,您可以在構建版本時為自己提供更大的靈活性。 即假設您有兩個非依賴功能(功能1和功能2)正在進行中,這兩個功能都已合並到您的“TestServer”分支中。 如果功能1測試失敗,功能2仍然可以在沒有功能1的情況下進一步發展 - 這是因為您合並到'TestServer'是單向合並 - 沒有任何結果,沒有歷史記錄。 相反,您的Feature 2分支將合並為“develop”並最終合並為“master”。
我們正在為自己采用/制定類似的策略。 我們的關鍵要求是適應不可避免的櫻桃采摘功能 。 請注意,我們的解決方案雖然相當復雜,但它是為企業應用程序設計的,可作為多個業務所有者擁有的多個服務的平台,並利用多個內部框架。
這些環境分為兩類,“測試中”(QA,階段和UAT)和“生產”(BETA和LIVE)。
功能優先級可以經常更改,從測試問題到監管限制/請求。 為了適應這種情況,創建了多個分支來表示環境/類別,如下所示:
我們還根據需要使用Master的HotFix分支,並在“預生產”分支中准備生產版本(更正錯過的版本增量等 - 次要內容)。
我們總是從Release-Candidate分支新功能,因為此分支始終包含“Committed for production”功能。 一旦做出生產承諾,沒有什么能夠超越。
一旦功能准備好進行測試,它就會合並(單向)進入“舞台”。 這會觸發CI構建並部署到QA。
如果QA服務器看起來穩定,則開發人員會觸發自動部署到Stage。
如果需要更改,請在功能中進行更改並重復。 如果可以進行業務測試,則從Feature合並到UAT。 這部署到UAT。
如果功能未通過業務測試,則進行功能更改並重復。 如果功能延遲,則不采取任何措施。 如果功能正常並簽名,則合並到Release Candidate。
一旦收集(1個或多個)功能在Release-Candidate中,通過從Release-Candidate合並到Master(通過Pre-Production)來觸發生產部署。
部署失敗,然后是HotFix。 如果正常,請部署到Live。
我們使用TFS的工作流程如下所示:
最后,每個環境/類別的部署將如下所示:
Git是一個版本控制系統。 它維護源代碼及其更改。 開發在開發階段停止。 之后,源代碼不應該改變。
當您將項目移動到下一個階段(測試,發布,生產)時,您不應該提供源代碼,而是從標記版本構建二進制文件,因為:
所以它可能不會干擾git-flow模型,但我認為這些點值得考慮。 實際上,我不是git-flow策略的忠實粉絲。 如果你有一分鍾給這些機會:
https://barro.github.io/2016/02/a-succesful-git-branching-model-considered-harmful/ https://trunkbaseddevelopment.com/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.