11

git log --decorate関連する参照に関する情報をログ出力に追加します。

commit 9e895ace5d82df8929b16f58e9f515f6d54ab82d (tag: v3.10-rc7)
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Sat Jun 22 09:47:31 2013 -1000

    Linux 3.10-rc7

この情報は、どのタグ (またはブランチ) にこのコミットが含まれているかを追跡するのに役立ちます。制限されたファイルのセット (サブディレクトリなど) を表示する場合、それらのコミットのタグは必要ありません。ログ出力にタグへの参照を入れる方法はありますか?

前述git describeしましたが、v3.10-rc7-135-g98b6ed0これは、この変更がコミットされたブランチのタグに関連するものです。私が探しているのは、コミット間のタグ名です。

わかりやすくするために、これは現在の状況です。

$ git log --decorate --oneline
98b6ed0 (HEAD, origin/master, master) Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
1a506e4 Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
578a131 dlci: validate the net device in dlci_del()
11eb264 dlci: acquire rtnl_lock before calling __dev_get_by_name()
...
9e895ac (tag: v3.10-rc7) Linux 3.10-rc7

私がしたいのは次のようなものです:

98b6ed0 (v3.10-rc7+, HEAD, origin/master, master) Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
1a506e4 (v3.10-rc7+) Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
578a131 (v3.10-rc7+) dlci: validate the net device in dlci_del()
11eb264 (v3.10-rc7+) dlci: acquire rtnl_lock before calling __dev_get_by_name()
...
9e895ac (tag: v3.10-rc7) Linux 3.10-rc7

コミット ハッシュの代わりに の出力を使用git describeすると、次のようになります。

$ git log --decorate --oneline -n4 | awk '{system("git describe " $1 " |tr -d '\''\n'\''");$1="";print}'
v3.10-rc7-135-g98b6ed0 (HEAD, origin/master, master) Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
v3.10-rc7-54-g1a506e4 Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
v3.10-rc6-81-g578a131 dlci: validate the net device in dlci_del()
v3.10-rc6-80-g11eb264 dlci: acquire rtnl_lock before calling __dev_get_by_name()
...
v3.10-rc7 (tag: v3.10-rc7) Linux 3.10-rc7

ご覧のとおり、コミットがマージされたポイントではなく、古いタグ名が参照ポイントとして使用されています。説明のためにgit log --onelineここで使用していますが、実際にはより完全な出力を使用したいと考えていますgit log -p --stat

4

2 に答える 2

9

(git 1.8.4 で導入された)の--first-parentパラメーターは、コミットがどこから派生したかを示します。commit に続く最初のタグとの関係を確認するには、 を使用します。ただし、履歴を深く掘り下げると、このオプションは非常に遅くなります (~6 秒)。git 1.5.3 以降で利用可能です。git describegit describe --contains

このコマンドは、git name-rev注釈を付けるために使用できgit rev-nameます。そのマニュアルページから:--graph--color

コミットが与えられたら、それがローカル ref に対してどこにあるかを調べます。誰かがその素晴らしいコミット 33db5f4d9027a10e477ccf054b2c1ab94f74c85a について書いたとしましょう。もちろん、コミットを調べますが、それは何が起こったのかを示すだけで、コンテキストはわかりません。

入力git name-rev:

% git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a
33db5f4d9027a10e477ccf054b2c1ab94f74c85a tags/v0.99~940

v0.99 の 940 リビジョン前に発生したことを知っているので、あなたは賢明です。

あなたができるもう一つの良いことは次のとおりです。

% git log | git name-rev --stdin

この最後のコマンドは、以下に示すように、40 文字の SHA-1 ハッシュごとに何かを追加します (強調表示された部分は によって追加されgit name-revます)。

commit 1ee2dcc2245340cf4ac94b99c4d00efbeba61824 (タグ/v3.13-rc1~33)
マージ: 4457e6f 091e066
著者: ライナス・トーバルズ

    マージ git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

commit b4089d6d8e71a7293e2192025dfa507a04f661c4 (タグ/v3.13-rc1~7^2~6^2^2~8)
著者: フェリックス・フィートカウ

    rt2x00: HT ディスクリプタ処理のクラッシュ バグを修正
...
commit dfb6b7c109a7f98d324a759599d1b4616f02c79f (タグ/v3.12-rc7~20^2~20^2^2~11)
作者: スタニスワフ・グルシュカ
日付: 2013 年 9 月 23 日月曜日 04:08:13 +0200

    「rt2x00pci: 可能な限り PCI MSI を使用する」を元に戻します

    これにより、コミット 9483f40d8d01918b399b4e24d0c1111db0afffeb (tags/v3.11-rc1~16^2~103^2^2~111)が元に戻ります。

git log出力を後処理するための awk スクリプトは、 https://git.lekensteyn.nl/scripts/tree/git-log-describe.awkで入手できます (私が知る前に作成されましたgit rev-name)。特徴:

  • commit <hash>40 文字のハッシュの代わりにからのハッシュを考慮します (--abbrev-commitあまりにも動作します)。
  • git log --graphフォーマットのサポート。
  • 追加git describe --containsまたはgit describe --first-parent出力します。
  • 後で時間を節約するためにキャッシュ ディレクトリを指定する可能性。
于 2013-11-23T11:34:40.137 に答える
2

ご覧のとおり、コミットがマージされたポイントではなく、古いタグ名が参照ポイントとして使用されています。

それは可能になるはずです...すぐに(git 1.8.4 2013年7月):

コミット e00dd1e9485c50f202cc97dfae19d510e108b565を参照してください。

describe: Add --first-parent option

コミット履歴をたどるときは、最初の親コミットのみを考慮してください。
これは、マージ後にブランチのタグのみを一致させたい場合に便利です。


OP Lekensteynは、それ ( --first-parent) では不十分だとコメントしています。

--first-parentマージされたタグも表示されません。がそのために使用できることを
発見しました。さらに良い解決策については、私の回答を 参照してください。--contains
git name-rev

注: git0.99.9 (2005 年 10 月!)git name-revからさかのぼります。

于 2013-06-29T12:22:45.390 に答える