2012-04-19 69 views
16

我一直使用git流幾個月,它工作得很好。我想自動執行「凹凸版」操作。尋找一種方法自動化git流的「凹凸版本」

該項目是PHP和footer.php有一個標記來替換當前的發行標記。我敢肯定,有一些awk的git日誌和PHP文件的一切應該工作,但我認爲有人已經這樣做過...

任何想法?

回答

13

你可以使用the semver gem,增加了一個文件.semver你混帳回購協議的根源。 Semantic version numbers是具有結構化/一致性/有意義的版本號的建議,該gem使其易於實現。

因此,所有你需要做的就是添加:

semver inc major|minor|patch 

到您的工作流程(手動或腳本),使得.semver被釋放時更新。

如果你不想ruby依賴,那麼semver非常簡單,所以sed的一些實驗可能會產生一個工作的解決方案。

1

這裏是我們用來遞增constants.h版本號代碼:

constants='../Include/constants.h' 

# Get the current build number 
currentbuild=`grep PRODUCT_BUILD $constants|sed 's/[^0-9]//g'` 
currentversion=`grep PRODUCT_VERSION $constants|sed 's/[^.0-9]//g'` 

echo "currentbuild=$currentbuild and currentversion=$currentversion" 
newver=$((1+$currentbuild)) 

# Update the build number on-disk: 
cp $constants /tmp/constants 
if sed -e "/PRODUCT_BUILD/ s/[0-9][0-9]*/${newver}/" </tmp/constants> $constants 
then  
    echo "Updated build number from $currentversion.$currentbuild to $currentversion.$newver." 
    cd ../Include 
    # Check it into version control 
    svn ci -m "updated build number to ${currentversion}.${newver} for $buildid in $buildroot" 
else 
    echo "There was a problem updating $constants to build $newver" 
fi  
8

還有(在https://github.com/peritus/bumpversion更多信息)bumpversion那旨在取代那個癲魔。

使用pip install bumpversion進行安裝,告訴它哪些文件包含您的版本號以及是否要提交併標記該文件。它也是高度可配置的(默認語義版本化),所以你可以添加一個聲明性的配置文件,告訴你如何將這個軟件項目的版本升級到你選擇的vcs,而其他版本也可以顛覆版本。

+0

這是一個漂亮的小工具Python安裝文件進行。謝謝 – Alex 2014-05-01 01:59:20

+0

'bumpversion'似乎已被原始開發者拋棄,但有一個[fork](https://github.com/c4urself/bump2version)更加主動地維護,並增加了一些功能,例如帶標籤的標籤。 – ostrokach 2017-11-17 16:42:12

3

Semver網頁狀態:

給定一個版本號MAJOR.MINOR.PATCH,遞增:

  • 當你做出不兼容的API改變主要版本,
  • 次版本時加功能以向後兼容的方式執行,並且當您進行向後兼容的錯誤修復時,可以使用
  • 修補程序版本。

用於預發佈和構建元數據的其他標籤可作爲MAJOR.MINOR的 擴展。PATCH格式。

Gitflow用來分支的命名慣例,bug修復住上hotfix/和新功能與feature/前綴前綴分支機構。

當這種類型的任何分支合併到發佈分支時,這會導致PATCH增加。如果某個功能已被合併,MINOR字段應該增加。

給定一個特定的版本,你應該能夠確定是否有任何一個分支已經合併以及哪個字段會碰撞。

困難的部分是找出一個突破性的變化。在過去,我已經考慮在編譯代碼上使用反射來確定API是否已經改變,但是,我認爲在提交消息中使用關鍵字來指定重大更改會容易得多。

0

您可以自動執行每次提交的版本。 在這裏,你可以找到它使用shell腳本,並內置git的鉤來完成: https://github.com/addonszz/Galileo/tree/develop/githooks

外殼紙條運行是: https://github.com/evandrocoan/.versioning/blob/master/scripts/updateVersion.sh

關於自動化問題,每一件事情是如何知道你是否正在更新主要,次要,補丁或構建,當你承諾一切。

我的意思是,構建你可以自動化每個開發分支提交,就像上面的鏈接所做的那樣。

補丁,你可以鉤住每一個git流修補程序完成。上面的鏈接只是缺乏掛鉤修補程序完成以增加修補程序版本運行: ./githooks/updateVersion.sh patch

但是小和主要沒有技巧,他們都在功能完成版本內完成。

觀測數據

我找到了解決掛鉤預修補程序,提交,它是這樣一個問題: How to pre-hook the gitflow hotfix finish?

0

如果我正確理解你的「凹凸版」操作,那麼你的意思是增加一旦你開始發佈版本號爲git flow release start x.x.x的任意數量的文件,版本號也在git標籤中表示。

由於Driessen原來的git流已經停止,非官方的繼承者似乎是包含大量git流掛鉤的Peter van der Does gitflow-avhhttps://github.com/petervanderdoes/gitflow-avh/)。請參閱https://github.com/petervanderdoes/gitflow-avh/tree/develop/hooks以獲取完整列表。

我做了版本在碰撞與post-flow-release-start這個腳本:

VERSION=$1 

# Get rid of version prefix 
STRIPPED_VERSION=`echo $VERSION | cut -d'v' -f 2` 
sed -i '' -E "s/^([ |#|[:alpha:]]*)\[.*\]$/\1[$STRIPPED_VERSION]/1" ./README.md 
sed -i '' -E "s/^([\t| ]*\"version\":)\".*\"/\1\"$STRIPPED_VERSION\"/1" ./package.json 
git commit -a -m "version $STRIPPED_VERSION" 

exit 0 

這是一個有點僵硬,因爲這兩個文件進行硬編碼(README.md和的package.json)。您可以從最後一個標記中搜索舊版本,然後針對循環中的所有已配置文件重新進行補充。

注意事項:
OSX需要sed -i的後綴,但可以使用空引號。此外,sed的擴展正則表達式參數在Linux上的命名方式也不相同。