私は2、3か月間git flowを使用していて、非常にうまく機能しています。「バンプバージョン」の操作を自動化したいのですが。
プロジェクトはPHPであり、footer.phpには現在のリリースタグに置き換えるトークンがあります。gitログとPHPファイルを少し調整すれば、すべてうまくいくはずですが、誰かが以前にこれを行ったことがあると思います...
何か案は?
私は2、3か月間git flowを使用していて、非常にうまく機能しています。「バンプバージョン」の操作を自動化したいのですが。
プロジェクトはPHPであり、footer.phpには現在のリリースタグに置き換えるトークンがあります。gitログとPHPファイルを少し調整すれば、すべてうまくいくはずですが、誰かが以前にこれを行ったことがあると思います...
何か案は?
git リポジトリのルートにファイルを追加するsemver gemを使用できます。セマンティック バージョン番号は、構造化された/一貫性のある/意味のあるバージョン番号を持つための推奨事項です。gem を使用すると、実装が簡単になります。.semver
したがって、必要なのは次を追加することだけです。
semver inc major|minor|patch
リリース中に .semver が更新されるように (手動またはスクリプトで) ワークフローに追加します。
ruby への依存を望まない場合、semver は非常に単純なので、少し sed を試してみると、実用的な解決策が得られる可能性があります。
私の git-flow の分岐プロジェクトでは、実際にフックとフィルターを実装しました。元のプロジェクトで多くの人が行った要求ですが、これまでのところ実装されていません。これらを使用すると、プロジェクトのバージョン番号を自動的に更新できます。分岐したプロジェクトは、 https://github.com/petervanderdoes/gitflowにあります。
バージョン バンピングに関するいくつかの Bash スクリプトについては、私が作成した 2 つの要点 https://gist.github.com/2877083または https://gist.github.com/2878492を確認できます。
Semver の Web ページには次のように記載されています。
バージョン番号 MAJOR.MINOR.PATCH を指定すると、次の値がインクリメントされます。
- 互換性のない API の変更を行った場合のメジャー バージョン、
- 下位互換性のある方法で機能を追加する場合の MINOR バージョン、および
- 下位互換性のあるバグ修正を行う場合の PATCH バージョン。
プレリリースおよびビルド メタデータの追加ラベルは、MAJOR.MINOR.PATCH 形式の拡張機能として利用できます。
Gitflow はブランチの命名規則を使用し、バグ修正は のプレフィックスが付いたブランチに適用されhotfix/
、新しい機能には のプレフィックスが付けられfeature/
ます。
このタイプのブランチがリリース ブランチにマージされると、PATCH
が増加します。フィーチャがマージされている場合は、MINOR フィールドを増やす必要があります。
特定のリビジョンを指定すると、いずれかのブランチがマージされたかどうか、およびどのフィールドをバンプするかを把握できるはずです。
難しいのは、重大な変更を見つけることです。過去に、コンパイルされたコードでリフレクションを使用して API が変更されたかどうかを判断することを検討しましたが、コミット メッセージでキーワードを使用して重大な変更を指定する方がはるかに簡単だと思います。
「バンプバージョン」操作を正しく理解していれば、 でリリースを開始した後、任意の数のファイルでバージョン番号を増やすことを意味しますgit flow release start x.x.x
。バージョンは git タグ内でも表されます。
Driessen の元の git-flow は廃止されたため、非公式の後継者は Peter van der Does gitflow-avh
( https://github.com/petervanderdoes/gitflow-avh/ ) であり、多数の git flow フックが含まれているようです。完全なリストについては、 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
2 つのファイル (README.md と package.json) がハードコードされているため、少し厳密です。最後のタグから古いバージョンを検索し、ループ内のすべての構成済みファイルを置き換えることができます。
警告:
OSX では のサフィックスが必要sed -i
ですが、空の引用符を使用できます。また、Linux では拡張正規表現パラメータの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