在我們的開發過程中存在一個「問題」(實際上是一種麻煩,但是一個主要問題)。防止VCS分支之間的版本合併
我們已經建立了一個良好的持續集成 - 部署 - 交付管道;基本上,我們的流程是這樣的:
新開發發生在默認分支(我們使用Mercurial,但git會有同樣的問題);通常我們在那裏只發展一個小小的改進;
一旦提高準備和測試(的東西,通常發生兩次或每週三次,我們的週期是很短),它合併到釋放分支(這實際上代表候選版本),它是在類似生產的環境中再次進行測試,如果它通過了我們所有的測試,它就會被推送到生產環境中。
如果我們需要進行bug修復,我們會在發佈分支上進行修改,我們會對其進行測試,然後將其推送到生產環境。
從每個分支構建一個工件(通常是一個RPM包)當生產中有一個版本時,發佈分支中的非常神器會被提升到我們的公共存儲庫。生產環境沒有分支,因爲我們通常不需要它(當它在發佈分支上的時間很短時,但它不在生產中;代碼不會在無人看管的情況下逗留)。
在這種情況下,對我們來說存在一個小問題。
爲了區分包,我們通常在版本分支上將版本設置爲1,對默認分支上的包設置2。然後我們的CI系統增加了它的內部版本號,所以我們有我們的軟件-1.0-build37 for release和ouroftware-1.0-build902作爲默認。這樣的版本是寫在我們的.spec文件或我們的pom.xml文件(或其他文件的不同軟件,如.gemspec或simila)
每當我們想把某些東西放入候選版本,我們合併默認分支到發佈分支。
那裏會發生什麼? 版本也合併爲。因此,在每次合併之後,我們需要返回包含版本的文件並將舊版本放入其中。我們應該只需要做一次(Mercurial不會嘗試重新合併已經合併的東西),但是每當我們需要從默認的發佈中進行合併時(例如,爲了將在發佈時完成的修復合併到開發分支)問題再次出現。
我想就如何完全防止這個問題提出一些建議; 如何在我的分支機構外設置版本?我有時實際上需要更改它們(例如,我想在發佈時將其從1更改爲2,並且默認情況下從2更改爲3),並且我不想在我們的CI系統中對它們進行硬編碼,我希望某些系統「分支」的範圍之外,這對存儲庫來說是「全局」的。或者我需要像「忽略修改某些文件」。
在許多情況下,我確實需要在我的文件中使用版本;例如,我不能從Maven pom.xml文件或.gemspec中省略版本信息,否則在開發時無法使用。
感謝,