web-dev-qa-db-ja.com

gitflowで「バンプバージョン」を自動化する方法を探しています

私は2、3か月間git flowを使用していて、非常にうまく機能しています。 「バンプバージョン」の操作を自動化したいのですが。

プロジェクトはPHPで、footer.phpには現在のリリースタグに置き換えるトークンがあります。gitlogとPHPファイルはすべてうまくいくはずですが、誰かが以前にこれを行ったことがあると思います...

何か案は?

20
spdaly

semver gem を使用すると、ファイルが追加されます.semverあなたのgitリポジトリのルートに。 セマンティックバージョン番号 は、構造化された/一貫した/意味のあるバージョン番号を持つための推奨事項です。gemを使用すると、実装が簡単になります。

だから、あなたがする必要があるのは追加することだけです:

semver inc major|minor|patch

リリース中に.semverが更新されるように、ワークフローに(手動またはスクリプトで)組み込みます。

Rubyの依存関係が必要ない場合、semverは非常に単純なので、sedの実験を少し行うと実用的な解決策が得られる可能性があります。

15
AD7six

bumpversion(詳細は https://github.com/peritus/bumpversion )それはそのsed魔法を置き換えることを目的としています。

pip install bumpversionを使用してインストールし、バージョン番号が含まれているファイルと、それをコミットしてタグ付けするかどうかを指定します。また、高度に構成可能であるため(デフォルトでセマンティックバージョニングを使用)、このソフトウェアプロジェクトのバージョンを選択したVCにバンプする方法の宣言型構成ファイルを追加でき、他のユーザーもバージョンをバンプできます。

12
peritus

SemverのWebページの状態:

バージョン番号MAJOR.MINOR.PATCHを指定して、以下をインクリメントします。

  • 互換性のないAPIを変更した場合のメジャーバージョン、
  • 下位互換性のある方法で機能を追加する場合のマイナーバージョン、および
  • 下位互換性のあるバグ修正を行う場合のPATCHバージョン。

プレリリースおよびビルドメタデータの追加ラベルは、MAJOR.MINOR.PATCH形式の拡張機能として利用できます。

Gitflowはブランチの命名規則を使用し、バグ修正はhotfix/のプレフィックスが付いたブランチで実行され、新機能のプレフィックスはfeature/です。

このタイプのブランチがリリースブランチにマージされると、これによりPATCHが増加します。機能がマージされている場合は、MINORフィールドを増やす必要があります。

特定のリビジョンを指定すると、いずれかのブランチがマージされているかどうか、およびどのフィールドをバンプするかを把握できるはずです。

難しい部分は、破壊的な変化を理解することです。以前は、コンパイルされたコードでリフレクションを使用してAPIが変更されたかどうかを判断することを検討していましたが、コミットメッセージでキーワードを使用して重大な変更を指定する方がはるかに簡単だと思います。

3
Dave Hillier

定数のバージョン番号をインクリメントするために使用するコードは次のとおりです。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    
1
Danny Schoemann

また、現在作成されているバンプバージョンのリポジトリを確認することもできますpython変更可能なセットアップファイル sing-bumpversion-package

1
jackotonye

'バンプバージョン'の操作を正しく理解している場合は、git flow release start x.x.xでリリースを開始したら、任意の数のファイルでバージョン番号を増やすことを意味します。バージョンもgitタグ内で表されます。

Driessenからの元のgit-flowが廃止されたため、非公式の後継者はPeter van der Does gitflow-avhhttps://github.com/petervanderdoes/gitflow-avh/ )、多数のgitフローフックが含まれています。完全なリストについては、 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の拡張正規表現パラメーターの名前が異なります。

0
atripes

コミットごとにバージョンバンピングを自動化できます。ここでは、シェルスクリプトと組み込みのgitフックを使用してそれが行われていることがわかります: https://github.com/addonszz/Galileo/tree/develop/githooks

実行するシェルスクリプトは次のとおりです。 https://github.com/evandrocoan/.versioning/blob/master/scripts/updateVersion.sh

すべてを自動化することに関する問題は、すべてをコミットするときに、メジャー、マイナー、パッチ、またはビルドのいずれを更新しているかを知る方法です。

つまり、ビルドの場合、上記のリンクで行ったように、すべての開発ブランチのコミットを自動化できます。

パッチ、すべてのgitflowホットフィックスの終了をフックできます。上記のリンクには、実行中のパッチバージョンをインクリメントするためのホットフィックスの終了をフックする機能がありません。./githooks/updateVersion.sh patch

ただし、マイナーとメジャーにはトリックはありません。これらはすべて、機能の終了リリース内で実行されます。

Obs

Pre-hotfix-commitsをフックするための解決策を見つけました、それは質問にあります: gitflowホットフィックスの終了を事前にフックする方法は?

0
user