web-dev-qa-db-ja.com

現在のタグを取得し、ブランチしてコミットする単一のGitコマンドはありますか?

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

43
Koraktor

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

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

6
Koraktor
  1. 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)

    その後、おそらくsedawk、あるいはおそらくMavenネイティブのメソッドで微調整/研磨を行うことができます。特定のタグが特定のコミットに関連付けられているため、HEADの前に3つのコミットがあった場合、たとえば "v1.0.0"でタグ付けされていると、上記で「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`"
    

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

    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、おそらくテキスト処理ツール/メソッドと組み合わせて、あなたが望むものを得るでしょう。

52
Jeet

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

10
Peter Farmer

そのようなことに対する私の「レポ」は常に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ページ」でこのコマンドを確認してください。

4
albfan

私はこのMavenプラグインを見つけました: https://github.com/alx3apps/jgit-buildnumber 、これは良いと思われます置き換えofbuildnumber-maven-pluginforgit projects。さらに、Maven Central Repositoriesから入手できます。

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

<session.executionRootDirectory>${basedir}</session.executionRootDirectory>
3
edrabc

これにより、HEADのコミットIDと、HEADにあるブランチまたはタグが表示されます。

git reflog --decorate -1

出力例:

484c27b (HEAD, tag: deployment-2014-07-30-2359, master, Origin/master) HEAD@{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD
1
webmat