首頁  >  問答  >  主體

這種場景下該採用怎麼樣的git分支管理策略?

目前開發的專案採用git作為版本管理工具,

平時開發有兩個分支,develop和master

在develop上開發,

在master發布正式版本。

目前有這樣一種情況:

有一個設計好的功能,由於種種原因,在develop分支上開發完成後不能正常使用,

需要使用另一個補救性的設計方案臨時代替,此代替方案需要上線,發佈到master裡面

當原功能成熟後,再刪除這個補救方法,切換回原有的功能

請問我該使用哪一種git分支策略?

曾经蜡笔没有小新曾经蜡笔没有小新2727 天前799

全部回覆(8)我來回復

  • 我想大声告诉你

    我想大声告诉你2017-05-02 09:22:14

    推薦Gitlab flow中的merge request方式
    master, develop分支都是不讓直接push的
    master = production
    develop = next release
    當有新需求時,建立需求分支 feature/aaa
    開發完成後建立 merge request
    code review 後合併 feature/aaadevelop 分支
    上線時合併 develop 分支到 master
    發布 master 分支

    對於樓主的問題可以這樣
    基於 feature/aaa 建立新分支 feature/bbb 完成補救工作後合併到 develop, feature/aaa 建立新分支 feature/bbb 完成补救工作后合并到 develop, master 然後上線
    繼續 feature/aaa 的開發工作,最後合併到 develop, feature/aaa 的开发工作,最后合并到 develop, master

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-02 09:22:14

    可以參考 git workflow

    大致就是 從 master分支checkout一个hotfixes分支。在hotfixes把补救的写好,然后分别mergemasterdevelop。此时就可以删除这个hotfixes分支。

    然後再從develop分支开发完善你的功能,最后把develop分支mergemaster上線。

    或許還有更好的方法,僅供參考

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-02 09:22:14

    雷雷

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-02 09:22:14

    先幫樓主解決這個問題。

    樓主的分支策略不用做特殊處理,按照正常的流程,結合 git 的功能即可處理的很好:

    • 首先,在 develop 上開發完成的 commit 後繼續提交補救性的程式碼,以確保 develop 的特性可以正常發布使用。這裡樓主提到的「補救性的方案」其實是特性開發的一部分,不算 bugfix 。
    • 之後,在測試通過後可以進入 release 流程。如果樓主原本的分支策略中有 release 分支,可以在上一步結束後就打出 release 分支,develop 繼續接受新的特性提交。而這次設計的方案和臨時性的補救在 release 上接受 bugfix。
    • 上面其實都是正常的開發發布流程。後續的設計的開發和補救功能的刪除怎麼辦呢?其實後續的開發其實可以看做改進或是新特性都可以,正常開發就好。你們可以根據需要在這個改進的過程中任何的節點 revert 當初的補救提交(git revert 命令)。
    • revert 補救和「原有的設計」實現後,在按照正常的發布流程發布就好了。

    依照我的理解,樓主所說的「原功能」、「補救方案」這些都是正常的代碼提交。樓主所困惑的應該是臨時補救方案最終要被丟棄(回滾)這個問題如何處理,所以使用上面提到的 git revert 命令應該能滿足樓主的預期。這樣既能保證所有的對程式碼庫的操作都可以被記錄在主幹(master、develop)中,也避免了複雜的分支模型等問題。


    另外,不知道樓主使用的分支策略是不是 按照 @rsj217 提到的 workflow 來做的。如果 develop 是所有開發人員的主要開發分支的話,我覺得 develop 最好還是不要接受未完成的開發特性直接提交比較好。在日常的開發工作,尤其是在多特性/分支並行開發的情況下,多個特性分支能避免彼此之間的干擾。
    回到樓主的問題上來,這個不能使用的設計方案可以繼續開發,不要合併到 develop 上去。基於這個分支 checkout 一個補救特性的開發分支,測試完成後合併到 develop 進入發布流程即可。後面的 merge 和 revert 建議還是要的,非迫不得已不要違背流程做特殊處理,而且這樣保留了所有的程式碼commit操作。

    回覆
    0
  • 怪我咯

    怪我咯2017-05-02 09:22:14

    建議參考git工作流程 master主分支 develop用於開發 release用於發布新版本 hotfix用於修復線上bug等緊急操作

    回覆
    0
  • 高洛峰

    高洛峰2017-05-02 09:22:14

    姑且說你的補救分支是develop1,上線之後develop1和master會merge到一起變成了新的master,原功能的分支develop等成熟穩定之後merge下新master(很大可能會衝突),把develop1的那部分刪掉,測驗沒問題上線。有點麻煩,可能還有點笨,可是git每次merge都是向前產生了一個新的點,你要是想等develop穩定了把master回退,如果中間有其他發布了,不久丟東西了麼。
    或許還有更好的方法,僅供參考

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-02 09:22:14

    如果看 A successful Git branching model 吃力,可以看 Juven Xu 的翻譯 一個成功的Git分支模型

    回覆
    0
  • 巴扎黑

    巴扎黑2017-05-02 09:22:14

    使用git-flow會對你有幫助,可以用簡單的指令,幫你完成創建,完成分支。並且有規範的release,hotfix,feature工作流程

    回覆
    0
  • 取消回覆