現在、3つのコマンドのコレクションを使用して、最新のコミットの現在のタグ、ブランチ、日付、SHA1を取得しています。
git describe --always --tag
git log -1 --format="%H%n%aD"
git rev-parse --abbrev-ref HEAD
これは次のようなものを出力します:
1.2.3-5-gdeadbeef
deadbeef3b8d90071c24f51ac8f26ce97a72727b
Wed, 19 May 2010 09:12:34 +0200
master
正直なところ、これで大丈夫です。しかし、私はMavenからこれらのコマンドを使用しています。以前にMavenを使用したことがある人は、外部コマンドのようなものがPOMを膨らませることを知っています。 pom.xmlをスリム化して、実行時間を少し短縮したいだけです。
私はまさにこの目的のためにMavenプラグインを作成しました。これは本当に私のニーズに適合します(実際には今ではそれを超えています)。
それは Mavanagaiata と呼ばれ、オープンソースでMaven Centralから入手できます。
git log
は非常に柔軟で、たくさんのオプションがあります。上記の3つのコマンドの正確な出力を再現することはできないかもしれませんが、必要な効果を達成するのに十分近くなる可能性があります。
例えば:
git log --pretty=format:'%ad %h %d' --abbrev-commit --date=short -1
最新の(HEAD)コミットの日付、SHA-1、およびシンボリック参照(タグを含む)を生成します。
2010-05-20 45bd5e7(HEAD、Origin/master)
その後、おそらくsed
やawk
、あるいはおそらくMavenネイティブのメソッドで微調整/研磨を行うことができます。特定のタグが特定のコミットに関連付けられているため、HEADの前に3つのコミットがあった場合、たとえば "v1.0.0"でタグ付けされていると、上記で「v1.0.0」が表示されます。
コミットの簡潔な説明を提供する、より簡単な単一のコマンドは次のとおりです。
git describe
これにより、最新の適用可能なタグ、タグ付けされたコミット以降のコミット数、およびSHA1が書き出されます。
v3.3.0-46-g71a77dc
私はMavenにまったく精通しておらず、外部プロセスを実行するのがどれほど簡単か難しいかわからないので、次のいずれかが何らかの形で役立つかどうかはわかりませんが、念のために言及すると思います。
あなたが説明する正確な目的、つまりビルドのタグ付けのために、autoconf/automakeフレームワークで、私は実際に次のようなものを使用します:
BUILDTAG="`git symbolic-ref HEAD 2> /dev/null | cut -b 12-`-`git log --pretty=format:\"%h\" -1`"
これは、プログラムパスの最後に追加するのに適したものを生成します。
master-c5282ff
コメントまたは印刷された識別子として含めるのに適した、より拡張された説明:
BUILDDESC="$(git symbolic-ref HEAD 2> /dev/null | cut -b 12-)-$(git log --pretty=format:'%h, %ad' -1)"
次のようなものを生成します:
master-c5282ff、Fri Mar 12 22:19:51 2010 -0600
git log
、おそらくテキスト処理ツール/メソッドと組み合わせて、あなたが望むものを得るでしょう。
私はMavenを使用していないため、これらのコマンドを呼び出す方法がわかりませんが、gitにカスタムコマンドを追加するのは簡単です。
次のようなgit-tbcというスクリプトを作成します。
#!/bin/bash
git describe --always --tag
git log -1 --format="%H%n%aD"
git rev-parse --abbrev-ref HEAD
Git-tbcがPATHにあることを確認してください。これで「git tbc」を呼び出すことができます。これはあなたが探していたものですか?
そのようなことに対する私の「レポ」は常にbash_completionです。わかりました、「タブタブ」はbashが生産的なツールになる方法です。だから、すべての魔法のようなものはどこから来たのですか?
/ etc/bash_completion.d /ディレクトリがあり、bash補完の拡張機能が残されています。実行可能なgitファイルがなければなりません。それを開いて、get_refs()のようなものを探します。チェックすると、git describeとgit for-each-refが友だちであることがわかります。いくつかの例を試してみましょう。
一般的なリポジトリ:
$ cd /your/git/repo; git branch -a
master
blaster
* brunch
lunch
remotes/Origin/master
remotes/Origin/develop
remotes/github/master
私のチェック済みブランチはどれですか?
$ git describe --contains --all HEAD
brunch
私のリモコンは何ですか?
$ git remote
Origin
github
リモコンのブランチは何ですか?
$ git for-each-ref --format="%(refname:short)" refs/remotes
Origin/master
Origin/develop
github/master
私の地元の支店は何ですか?
$ git branch
master
blaster
* brunch
lunch
...より解析可能なブランチ出力?
$ git for-each-ref --format="%(refname:short)" refs/heads
master
blaster
brunch
lunch
タグはどうですか?
$ git for-each-ref --format="%(refname:short)" refs/heads refs/remotes refs/tags
master
blaster
brunch
lunch
Origin/master
Origin/develop
github/master
release-0_1
release-0_2
release-1_0
「manページ」でこのコマンドを確認してください。
私はこのMavenプラグインを見つけました: https://github.com/alx3apps/jgit-buildnumber 、これは良いと思われます置き換えofbuildnumber-maven-pluginforgit projects。さらに、Maven Central Repositoriesから入手できます。
Maven 3でうまく動作します。 Maven 2マルチモジュールプロジェクトの場合は、親pomのプロパティセクションに次の行を追加するだけです。
<session.executionRootDirectory>${basedir}</session.executionRootDirectory>
これにより、HEADのコミットIDと、HEADにあるブランチまたはタグが表示されます。
git reflog --decorate -1
出力例:
484c27b (HEAD, tag: deployment-2014-07-30-2359, master, Origin/master) HEAD@{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD