我們的團隊在解決關於我們案例的最佳策略時遇到問題。沒有開發分支的特性分支模型的Git分支策略
我們的情景
- 每一個特徵有一個分開的分支
- 我們有來自
master
創建release
分支,準備下一個版本。將在下一個版本中的功能將合併到此分支中。但是,正如我所說的,在最後一刻,某些功能可能會退出該版本。 - 每一個特徵,在最後時刻,可以得到的版本(
release
分支)出來。我們不確定下一個版本會具有哪些功能。所以,我們不能使用類似develop
分支的東西(如Git流程中所述)。 - DBA團隊在生產中執行一些獨立於版本的腳本。這些腳本在master上提交,因爲它們已經在生產中。
我sugestion
我們正在考慮所產生的版本測試團隊從release
分支。如果它的一切就OK了,我們正在考慮到release
分支合併爲master
,使用此版本的標籤從master
分支把一個版本標記(如1.0)上master
和生成的版本。
在主唯一commmits不在版本承諾是DBA團隊的SQL提交。因此,從release
生成的版本等於master
。
但這不批准整個團隊。
恐懼
他們有一個關於我們將使用哪一個分支來生成EAR恐懼。在master
分支中生成的EAR文件與測試的EAR文件不完全相同,因爲這是從release
(另一個分支)生成的。
另一個擔心來自我的團隊是關於某個commiting(或合併功能)直接進入master
和主機產生的版本有這個意想不到的承諾。他們肯定會在某個時候發生。怕
部分是因爲DBA的承諾「爛攤子」主的歷史。主服務器只需要提交版本,但我不知道如何組織獨立於版本的DBA團隊的SQL腳本。這些SQL腳本與下一個版本一起發佈是沒有意義的,因爲這些腳本已經在生產數據庫中執行了。
解決方案(臨時?)
的解決方案,現在,是生成release
分支版本,並在生產中使用相同的EAR從release
分支。之後,release
分支將合併爲master
,並且將創建新的release
分支。 DBA SQL腳本將繼續在master
中提交。
我的意見
我不喜歡這種做法,因爲:
- 我們失去了機會,有穩定的歷史
master
僅含版本提交的版本標籤。我想爲此提供解決方案,但我不知道要解決DBA SQL腳本的問題。 - 恐懼也是基於過去的合併錯誤,他們使用(複雜的)Subversion作爲版本控制。
- 版本標籤將分佈在不同
release
分支上的存儲庫中。 - 基於某些開發者直接在
master
上做錯事的恐懼。 - 該解決方案與幾乎所有現有的分支模型都相反,因爲它不會生成主版本。我擔心現在看不到的其他問題。
即使有了這些擔憂,我也無法消除恐懼,並且我理解他們的恐懼。我想知道有沒有人對我們的問題有不同的解決方案。
更新
最初的恐懼之後,我們從master
分支產生的版本。在release
分支上進行測試後,我們將release
分支合併到master中,並從那裏生成版本。所以,所有版本標籤都保留在master
分支中。
如果在release
分支中檢測到某些問題,我們刪除此分支並生成一個新分支,而沒有問題的功能。
與某些特定功能無關的DBA腳本是獨立執行的,現在保存在另一個存儲庫中。
*** ***爲什麼你不能確定會使其進入下一個版本?你是否積極地恢復合併,以便工作不會進入?你爲什麼合併不完整的工作? – Makoto
@Makoto,謝謝你的關注。業務團隊需要這種靈活性。例如,在發佈日期附近的某些功能中發現問題/疑慮。在這種情況下,我們從這個特性恢復合併(或者刪除並創建一個新的'release'分支,但我不確定最佳策略)。我試圖爭辯說,我們應該爲每個版本都有一個封閉的版本,但這是項目性質所不可能的。 – Dherik
我假設你使用git是因爲你引用了「master」。是否有一個原因,你不使用功能分支,當功能被接受時,它可以合併到主?然後,你可以在任何時候直接從主人發佈... –