web-dev-qa-db-ja.com

著者日付の指定された日付範囲でコミットを表示するようにgitを取得するにはどうすればよいですか?

どうやら this

git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"

コミッターの日付に基づいてコミットをフィルタリングします。指定した著者の日付範囲のコミットを表示するにはどうすればよいですか?

46
Mr_and_Mrs_D

少なくとも、Gitだけではできません。 (この質問にアクセスする他の人へのリマインダー:それはviewing作者の日付ではなく、selecting by by作者の日付、la --since/--afterおよび--until/--beforeに関するものです。セレクタは、著者の日付ではなくcommitterの日付を使用します。極端な例として、コミットが「今」行われたため、コミッタの日付は2000年代ですが、author-dateフィールドで選択範囲が「世紀の変わり目付近」であれば、コミッターの日付は「現在」であり、1999年から10年以上後なので、このコミットの選択を解除します。

私はこれをGitの小さなバグだと考えています。コミッターの日付フィールドを使用するように要求できる場所であれば、作成者の日付フィールドを使用するように要求できるはずです。 %ad%cdなどがあるため、これはlog formatで簡単ですが、commit selectionでは不可能です。最も近いのは、git rev-listが作成者の日付でソートできることです(一般的なtopo-sorting内)。

git rev-listのような--use-author-dateのグローバルスイッチは、単純なパッチとして機能し、Gitに追加するのはそれほど難しくありませんが、--min-author-age--max-author-ageまたは同様のもの、および「作成者の日付で並べ替え」をする方が良いと思いますフラグ(一般的な--topo-orderフラグとは無関係です。そのため、both flagsの設定は--author-date-orderと同じ効果があります)。

回避策として、(git rev-listまたは同等のgit logなどのすべての潜在的に興味深いコミットをリストすることができます:日付フィルターを除き、コミットを潜在的に興味深いものにする任意の指定子を使用します:この場合は--allだけです)作成者の日付をすべて抽出しますフィールド(git log --format=%atなど)を使用して、コミットIDのリストを独自に整理し、残りのコミットIDをgit log --no-walkに再送信します。しかし、これはせいぜい苦痛です。詳細については、 awkを使用したTim Beigeleisenの回答 を参照してください。

21
torek

たぶん私は何かを見逃していますが、これで十分ではないでしょうか?

git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe"

here も参照してください

77
jackdbd

あなたcan

しかし、@ torekが述べたように、純粋なGitでこれを行うことはできないかもしれません。 1つのオプションは、git logawkに追加し、そこで著者の日付を確認します。

git log --date=iso --pretty=format:'%ad%x08%aN' | awk '$0 >= "2013-01-01" && $0 <= "2013-12-01"'

ここでは、%adは作成者の日付をISO形式で提供し、%aNは著者名を示します。

17
Tim Biegeleisen