3

NAnt タスクを使用してビルド サーバーをセットアップしようとしています。ビルドしたい Git リポジトリがいくつかありますが、結果のバージョン管理に問題があります。

各ビルドが各バージョンの番号を使用するようにライブラリ (dll) をバージョン管理するにはどうすればよいですか? Git には SVN のようなリビジョン番号がなく、何らかのハッシュがあることは知っています。コミット日を使用することを考えました。中央サーバーでのみマスターを構築するため、すべてのコミットが増加します (マージ日)。

日付の整数表現を取得できれば、これを使用できます (YYMMDD)。

今、私はすべてのクールなことをするために NAnt を使用します :)、Git は最新のコミットの日付を取得する方法を提供しますか?

4

3 に答える 3

4

あなたが欲しい

git log -1 --pretty=format:%cd HEAD

ヘッドはオプションです。指定されていない場合は推測されます。

于 2012-06-27T22:11:11.627 に答える
3

これはあなたが求めたものではないことはわかっていますが、バージョン番号を使用したい場合は、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/バージョン情報がドキュメントに表示され、ドキュメントを再生成するたびに更新されることに注意してください。

于 2012-06-27T22:21:38.747 に答える
3

これにより、最新のコミット (つまり HEAD) のコミット時刻が UNIX タイムスタンプ (エポックからの秒数、つまり 1970 年 1 月 1 日の 00:00:00 UTC) として得られます。

% git show -s --format='format:%ct' HEAD
1334298121

次に、日付を使用して、言及したYYMMDD形式に変換し、他のものを追加することもできます:

% date -r `git show -s --format='format:%ct' HEAD` +"foobar-%C%y%m%d.zip"
foobar-20120413.zip

(前に世紀を追加したの%Cは、それが正しいと思われるためですが、もちろん省略できます。foobarand.zipは、ファイル名を直接生成する方法の単なる例です。)

選択できるフォーマットは他にもいくつかあります。詳細については、以下を参照git show --helpしてください。

% git show -s --format='format:%cd' HEAD
Fri Apr 13 14:22:01 2012 +0800
% git show -s --format='format:%cD' HEAD
Fri, 13 Apr 2012 14:22:01 +0800
% git show -s --format='format:%cr' HEAD
3 months ago
% git show -s --format='format:%ct' HEAD
1334298121
% git show -s --format='format:%ci' HEAD
2012-04-13 14:22:01 +0800
于 2012-06-27T22:11:38.817 に答える