43

現在、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 をスリム化し、実行時間を少し短縮したいだけです。

4

6 に答える 6

52
  1. git log非常に柔軟性があり、多くのオプションがあります。上記の3つのコマンドの正確な出力を再現できない場合がありますが、必要な効果を達成するのに十分に近づく可能性があります。

    例えば:

    git log --pretty=format:'%ad %h %d' --abbrev-commit --date=short -1
    

    最新の(HEAD)コミットの日付、SHA-1、およびシンボリック参照(タグを含む)を生成します。

    2010-05-20 45bd5e7(HEAD、オリジン/マスター)

    その後、おそらく、sedおよび/またはawkMavenネイティブの方法で微調整/研磨を行うことができます。特定のタグが特定のコミットに関連付けられていることに注意してください。たとえば、「v1.0.0」でタグ付けされたHEADの前に3つのコミットがあった場合、「v1.0.0」が表示されることはありません。その上。

  2. コミットの簡潔な説明を提供するためのより単純な単一のコマンドは次のとおりです。

    git describe
    

    これは、最新の適用可能なタグ、タグ付けされたコミット以降のコミット数、およびSHA1を書き出します。

    v3.3.0-46-g71a77dc

  3. 私はMavenにまったく精通しておらず、外部プロセスを実行するのがどれほど簡単/難しいかわからないので、次のいずれかが何らかの形で役立つかどうかはわかりませんが、念のために言及するかもしれません。

    あなたが説明する正確な目的、つまりautoconf / automakeフレームワークでのビルドのタグ付けのために、私は実際に次のようなものを使用します。

    BUILDTAG="`git symbolic-ref HEAD 2> /dev/null | cut -b 12-`-`git log --pretty=format:\"%h\" -1`"
    

    これは、プログラムパスの最後にタックするのに適したものを生成します。

    マスター-c5282ff

    コメントまたは印刷された識別子として含めるのに適した、より拡張された説明:

    BUILDDESC="$(git symbolic-ref HEAD 2> /dev/null | cut -b 12-)-$(git log --pretty=format:'%h, %ad' -1)"
    

    次のようなものを生成します:

    master-c5282ff、金3月12日22:19:51 2010 -0600

おそらくテキスト処理ツール/メソッドと組み合わせて遊んでgit logみれば、あなたが望むものが得られると思います。

于 2010-05-20T00:42:09.890 に答える
10

私は 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」を呼び出すことができます。これはあなたが探していたものですか?

于 2010-05-19T08:11:30.217 に答える
6

私はまさにこの目的のために Maven プラグインを作成しました。これは私のニーズに本当に合っています (実際、今ではそれを超えています)。

これはMavanagaiataと呼ばれ、オープンソースであり、Maven Central から入手できます。

于 2011-05-13T07:28:23.433 に答える
4

そのようなもののための私の「レポ」は常にbash_completionです。わかりました、「タブ タブ」は bash が生産的なツールになる方法です。

/etc/bash_completion.d/ディレクトリにbash 補完用の拡張機能が残されています。git ファイルの実行可能ファイルが必要です。それを開いて、get_refs() などを探します。チェックを入れると、git describegit 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 ページ」をチェックしてください。

于 2011-09-16T08:02:07.493 に答える
3

私はこのMavenプラグインを見つけました:https ://github.com/alx3apps/jgit-buildnumber、これはgitプロジェクトbuildnumber-maven-pluginの良い代替品のようです。さらに、MavenCentralRepositoriesから入手できます。

Maven3でうまく機能します。Maven 2マルチモジュールプロジェクトの場合、親pomのプロパティセクションに次の行を追加するだけです。

<session.executionRootDirectory>${basedir}</session.executionRootDirectory>
于 2012-11-20T09:31:46.857 に答える
1

これは、HEAD のコミット ID と、たまたま HEAD にあるすべてのブランチまたはタグを表示します。

git reflog --decorate -1

出力例:

484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) HEAD@{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD
于 2014-08-25T13:30:04.497 に答える