1. ホーム
  2. git

[解決済み] Gitでバージョン番号を管理するには?

2023-07-03 17:15:48

質問

ここでは blerp でメンテナンスされているコマンドラインツールを想像してみましょう。 git . このツールは、(非表示の) --version オプションがあり、その バージョン (仮に 0.1.2 とします)、そして別の --commit で、これはビルド元のコミット番号を返します。

バージョンとコミット番号の両方がコードベースにハードコードされています。

今、私はバグフィックスを行い、コミットしてプログラムをリビルドします。このとき、まだ 0.1.2 が表示されますが、この新しいバージョンはオリジナルの 0.1.2 とは異なっています。コミットによってのみ、それが同じ0.1.2ではないことがわかります。そのバグフィックスは異なるバージョン番号に値するのでしょうか?

1 つの解決策は、私がコミットするたびに、ハードコードされたバージョン番号を増やすことです (これは、コミットごとに最低 2 ファイルを常に変更することを意味します)。これは拘束力のある解決策であり、開発者が異なるアクティブなブランチで作業しているときには機能しません。もしボブが機能 foo をバージョン 0.1.2 で、アリスは機能 bar を同じバージョンから作成します。彼らはどのようにしてバージョン番号を増やすのでしょうか? ボブは奇数を、アリスは偶数を使うことができます。Eveが3つ目の機能で動く場合はどうでしょうか?

もう一つの解決策は、バージョン番号を自動的に生成するためにGitタグを使うことです。スクリプトは、最も近いタグを見つけることができます。 v で始まる最も近いタグを見つけることができます。 v0.1.2 で、タグ名をバージョン番号に現在のコミットの最初のn桁を足したもの( v0.1.2 (build 4acd21) ). これは、作業ディレクトリがクリーンである場合にうまく機能します。ある人は * をビルド番号の前に追加して、作業ディレクトリがクリーンでないことを示すこともできます。この方法の主な問題は、誰かがソースをエクスポートした場合、 そのソースでは blerp .

この問題を解決するために、どのような代替案が考えられるでしょうか。

どのように解決するのですか?

Alexey KiselevとDarioがすでに答えを提示していますが、私が詳しく説明します。

バージョン管理スキーム

バージョニング方式には2種類あります。

  1. 内部バージョン番号。これは一日に何度も増加させることができます (例: リビジョン管理番号)
  2. リリースされたバージョン。これはあまり頻繁に変更されません (例: セマンティックバージョニング)

人々が使う 異なるスキーム を使いますが セマンティックバージョニング はかなり広く使われており、GitHub の共同創設者である Tom Preston-Werner が執筆しています。

セマンティック・バージョニング

セマンティックバージョニングは、以下のパターンに従います。 X.Y.Z

あるいは、より読みやすいのは [major].[minor].[patch]-[build/beta/rc]

例えば 1.2.0-beta

major or X は、下位互換性のない API のリリースなど、ソフトウェアに大きな変更があった場合にインクリメントされる可能性があります。

minor or Y は後方互換性のある API が導入された場合、インクリメントされます。

patch or Z はバグフィックスの後にインクリメントされます。

Gitを使ってどのように実現するのでしょうか。

タグを使うことで、です。

Gitのタグは、バージョン番号を追加するために使用することができます。

git tag -a "v1.5.0-beta" -m "version v1.5.0-beta"

は、現在の Git リポジトリに v1.5.0-beta というバージョンタグを追加します。これ以降の新しいコミットには、コミット番号とコミットハッシュが追加され、タグが自動でインクリメントされます。これは git describe コマンドで確認できます。

v1.5.0-beta-1-g0c4f33f ここで -1- はコミット番号で 0c4f33f はコミットのハッシュの省略形です。また g という接頭辞は "git" .

完全な詳細は、以下を使用して表示できます。

git show v1.5.0-beta