これはあなたが求めたものではないことはわかっていますが、バージョン番号を使用したい場合は、git-describe がオプションです。
ライブラリとプログラムのバージョン情報を提供するために使用します。私は version format を使用しているのでX.Y.Z
、git-describe は完璧に機能します。また、最新のコミットのコミット ID も提供されるという追加の利点があるため、ソース履歴のどの時点でライブラリ/プログラムがコンパイルされたかを常に正確に把握できます。
git-describe を使用するには、署名付きタグを使用する必要があります。タグを作成するときは、 の形式を使用しますvX.Y
。git-describe はvX.Y-Z-gC
、X がメジャー バージョン、Y がマイナー バージョン、Z がパッチ レベル、C が git コミット ID である形式を使用して、パッチとコミット情報を追加します。
たとえば、コミットを作成します。
$ git tag -s v0.2 -m "Creating release 0.2"
$ git tag
v0.0
v0.1
v0.2
$ git describe --long --abbrev=7
0.2.0.gbb871fd
次に、以下を使用して、パッチ レベルのバージョンを取得できます。
GIT_DESCRIBE=`git describe --long --abbrev=7 |sed -e 's/-/./g' -e 's/^v//g'`
GIT_MAJOR=`echo ${GIT_DESCRIBE} |cut -d. -f1`
GIT_MINOR=`echo ${GIT_DESCRIBE} |cut -d. -f2`
GIT_PATCH=`echo ${GIT_DESCRIBE} |cut -d. -f3`
GIT_COMMIT=`echo ${GIT_DESCRIBE} |cut -d. -f4`
echo "${GIT_DESCRIBE}"
0.2.53.g00e0e11
echo "${GIT_MAJOR}.${GIT_MINOR}.${GIT_PATCH}.${GIT_COMMIT}"
0.2.53.g00e0e11
上記の出力では、最後のタグが作成されてから 53 件のコミット (パッチ適用) があり00e0e11
、リビジョン履歴の最新のコミットの部分的なコミット ID です。
バージョン情報を解析したら、C ヘッダー ファイルを作成して、ソース コード内で使用するバージョン番号を定義します。
cat << EOF > lib_version.h
#undef MYLIB_VER_MAJOR
#undef MYLIB_VER_MINOR
#undef MYLIB_VER_PATCH
#undef MYLIB_VER_COMMIT
#undef MYLIB_VERSION
#define MYLIB_VER_MAJOR ${GIT_MAJOR}
#define MYLIB_VER_MINOR ${GIT_MINOR}
#define MYLIB_VER_PATCH ${GIT_PATCH}
#define MYLIB_VER_COMMIT "${GIT_COMMIT}"
#define MYLIB_VERSION "${GIT_DESCRIBE}"
EOF
上記と同様の手法を使用して、autoconf (およびその仲間) と Xcode の外部ビルド ターゲットを使用してパッケージのバージョン情報を生成しました (これは、実際に私のすべての iOS アプリのバージョン管理方法です)。
上記を実装した実際の例 (ソース コード付き) を次に示します。http://bindle.github.com/LdapKit/バージョン情報がドキュメントに表示され、ドキュメントを再生成するたびに更新されることに注意してください。