2016-11-30 48 views
0

在一個合理的「僅合併到master」git工作流程(例如gitflow)中 - 所有更改都發生在分支中,然後合併(可能作爲Pull Request的一部分) - 如何處理版本控制?如何將版本控制與僅合併到主Git工作流?

對於標記,我很容易就可以git tag特定的合併提交,沒什麼大不了的。

但是,許多應用程序框架依賴版本文件(例如package.jsongemspec甚至自定義文件)。

我看到幾個選項:

  1. 修改該文件作爲分支的一部分。這並不是很好,因爲你很少提前知道哪個版本會先合併,特別是有許多分支並行運行的大型團隊。
  2. 提交後修改文件。這不是很好,因爲我現在承諾掌握,並且b-自動化的CI/CD將抓住之前的提交併釋放它,但它具有舊版本號和c-有2個提交以用於一個版本的提交,有可能檢出錯誤的版本;容易出現人爲錯誤
  3. 使版本文件成爲模板並從git標籤自動生成它。這也不是很好,因爲本地工具會破壞它(嘗試運行npm <anything>且無效的package.json),並且回購不再可以作爲原子單位獨立運行。

是否有一個合理的標準方式來做到這一點,當版本控制是在提交的一部分的文件?

回答

1

您可能會採用一種策略,人類可能通過合併爲主分支做出貢獻,並且只有自動化的CI/CD(例如Jenkins)可以直接在主服務器中更改版本文件的內容。從CI/CD的角度來看,自動化發佈過程可能是這樣的:

  1. 拉主(主代碼凍結開始)
  2. 運行預發佈版本(老版)
  3. 增量內容的ver文件和提交
  4. 運行版本建立與新版本版本(不同於#2的內容的ver文件)
  5. 推動主中央回購(可能與--force,如果索姆EONE違反主代碼凍結

作爲補充,你可以保護版本文件從合併到主的變化與.gitattributes在版本文件目錄與內容verfile merge=ours(見here

+0

大部分我都有,謝謝@IrLED。您的建議的關鍵是僅通過CI/CD更改版本控制文件?對此的挑戰是,在那裏通常比只有版本更多。想想'package.json'或'Gemfile'。在正常的開發過程中,大部分需要改變;只有一個領域需要控制。 – deitch

+0

>您的建議的關鍵是僅通過CI/CD更改版本控制文件? 是的,就是這一點。要將受保護的部分與公共可用部分分開,可以運行'package.json'的預處理類型 - 從ver文件注入值。 – IrLED

+0

我需要通過一點思考。這需要一些非常脆弱的邏輯 - 每個文件類型 - 以使用戶能夠改變除了那一行之外的所有內容。 – deitch

1

這聽起來像在存儲庫中需要什麼樣的模板版本文件,然後將其作爲正常構建系統的一部分構建到實際版本文件中,並從存儲庫中提取信息。

我建議Autorevision從版本庫中獲取版本信息,以便於使用。

+0

與@ IrLED的方法類似,使用特定的工具,謝謝。我想我會嘗試一下兩者的結合。 – deitch