2

どのコミットがファイルを導入したかを知りたいです。私は現在やっています:

git log --reverse --pretty="%h" <filename> | head -n 1

しかし、これは非常に高価であることに気づきました。(より安価なplubmingコマンドを使用して)それをより速く行う方法はありますか?おそらく歴史を二等分することによって?

4

4 に答える 4

2

これでうまくいくはずです:

git log --oneline <filename> | tail -1
于 2013-02-13T15:24:09.997 に答える
1

おそらくあなたは必要ありませんがgit log、ただgit rev-list

git rev-list HEAD -- <filename> | tail -n 1

また

git rev-list --reverse HEAD -- <filename> | head -n 1

基本的にはと同じコマンドgit logですが、コミットのSHA-1のみが返されるため、ログメッセージのフォーマットのオーバーヘッドが失われます。そのオーバーヘッドが歴史を歩くことに比べて重要であるかどうかは別の問題です。

独自のバイナリ検索を実装するために使用することは可能git rev-list --bisectですが、必要なものへの繰り返しの呼び出しは、またはのいずれかgit rev-listに単一の呼び出しをパイプするよりもほぼ確実に遅くなります。headtail

于 2013-02-13T18:14:02.970 に答える
0

ファイルをいつ追加したかについて大まかな考えがある場合は、試してみることができます

git log --reverse --until 2012-06-01 -n 1 -- <filename>

2012年6月1日以降にファイルが導入されなかったと確信している場合。との組み合わせは、指定された日付より前の最初のコミットのみ--reverseを表示します。-n 1結果が得られない場合は、見積もりが早すぎるため、後日試す必要があります。

git(有向非巡回グラフを使用して)履歴を保存する方法を考えると、git log低レベルの配管コマンドをつなぎ合わせることによって必要となるよりも大幅に多くの作業を行っているとは思いません。

于 2013-02-13T15:43:39.123 に答える
0

diff-filter=Aを使用します

git log --reverse --format=%H --name-status --diff-filter=A -- file1 file2 | grep ^A | cut -f2

ファイルの数に関係なく、1回のトラバーサルで必要な順序を取得できます。

于 2013-05-26T09:09:49.213 に答える