我一直使用git流幾個月,它工作得很好。我想自動執行「凹凸版」操作。尋找一種方法自動化git流的「凹凸版本」
該項目是PHP和footer.php有一個標記來替換當前的發行標記。我敢肯定,有一些awk的git日誌和PHP文件的一切應該工作,但我認爲有人已經這樣做過...
任何想法?
我一直使用git流幾個月,它工作得很好。我想自動執行「凹凸版」操作。尋找一種方法自動化git流的「凹凸版本」
該項目是PHP和footer.php有一個標記來替換當前的發行標記。我敢肯定,有一些awk的git日誌和PHP文件的一切應該工作,但我認爲有人已經這樣做過...
任何想法?
你可以使用the semver gem,增加了一個文件.semver
你混帳回購協議的根源。 Semantic version numbers是具有結構化/一致性/有意義的版本號的建議,該gem使其易於實現。
因此,所有你需要做的就是添加:
semver inc major|minor|patch
到您的工作流程(手動或腳本),使得.semver被釋放時更新。
如果你不想ruby依賴,那麼semver非常簡單,所以sed的一些實驗可能會產生一個工作的解決方案。
這裏是我們用來遞增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
在我的git-flow項目中,我實際上實現了鉤子和過濾器,這是許多人在原始項目中做出的請求,但迄今尚未實現。通過這些,您可以自動更新項目中的版本號。 叉形項目可以在這裏 https://github.com/petervanderdoes/gitflow
發現有關版本的一些Bash腳本撞你可以參考兩個學家,我創建 https://gist.github.com/2877083或 https://gist.github.com/2878492
還有(在https://github.com/peritus/bumpversion更多信息)bumpversion那旨在取代那個癲魔。
使用pip install bumpversion
進行安裝,告訴它哪些文件包含您的版本號以及是否要提交併標記該文件。它也是高度可配置的(默認語義版本化),所以你可以添加一個聲明性的配置文件,告訴你如何將這個軟件項目的版本升級到你選擇的vcs,而其他版本也可以顛覆版本。
Semver網頁狀態:
給定一個版本號MAJOR.MINOR.PATCH,遞增:
- 當你做出不兼容的API改變主要版本,
- 次版本時加功能以向後兼容的方式執行,並且當您進行向後兼容的錯誤修復時,可以使用
- 修補程序版本。
用於預發佈和構建元數據的其他標籤可作爲MAJOR.MINOR的 擴展。PATCH格式。
Gitflow用來分支的命名慣例,bug修復住上hotfix/
和新功能與feature/
前綴前綴分支機構。
當這種類型的任何分支合併到發佈分支時,這會導致PATCH
增加。如果某個功能已被合併,MINOR字段應該增加。
給定一個特定的版本,你應該能夠確定是否有任何一個分支已經合併以及哪個字段會碰撞。
困難的部分是找出一個突破性的變化。在過去,我已經考慮在編譯代碼上使用反射來確定API是否已經改變,但是,我認爲在提交消息中使用關鍵字來指定重大更改會容易得多。
您可以自動執行每次提交的版本。 在這裏,你可以找到它使用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?
如果我正確理解你的「凹凸版」操作,那麼你的意思是增加一旦你開始發佈版本號爲git flow release start x.x.x
的任意數量的文件,版本號也在git標籤中表示。
由於Driessen原來的git流已經停止,非官方的繼承者似乎是包含大量git流掛鉤的Peter van der Does gitflow-avh
(https://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上的命名方式也不相同。
您還可以看看我的回購爲bumpversion其目前的可修改Using-bumpversion-package
這是一個漂亮的小工具Python安裝文件進行。謝謝 – Alex 2014-05-01 01:59:20
'bumpversion'似乎已被原始開發者拋棄,但有一個[fork](https://github.com/c4urself/bump2version)更加主動地維護,並增加了一些功能,例如帶標籤的標籤。 – ostrokach 2017-11-17 16:42:12