web-dev-qa-db-ja.com

作成者のタイムスタンプに基づいてgitログを作成するにはどうすればよいですか?

git-logを含むかなり複雑な--date-orderコマンドを使用して、リポジトリのステータスの概要を取得します。残念ながら、--date-orderauthor日付ではなく、committer日付を使用しているようです。つまり、トピックブランチを最新のアップストリームにリベースすることでトピックブランチを最新の状態にするたびに、トピックブランチでの相対的なコミットのgit-logの有益な時系列順序が失われます(つまり、各ブランチは単一になりますすべてのコミットがシーケンシャルでほぼ同一のコミッターのタイムスタンプにリベースされたため)

git-logを取得して、committerタイムスタンプではなく、authorタイムスタンプでコミットを順序付けできる場合、これは解決されます。 。誰かがそれを行う方法を知っていますか?


Googleの検索結果からこのサイトにアクセスする場合は、下記の josephdpurcell のソリューション(および 詳細なブログ記事 !)をご覧ください。標準のgit-logスタイルの出力、複数行、および各コミットに関する詳細なメッセージを探している場合は、非常に優れています。

残念なことに、私はこの質問を修正する必要があります。私はばかであり、私のユースケースについてより具体的な情報を提供しなかったためです。「git-logモード」で--graphを使用し、 git-log自体をauthor-date-orderで動作させる。私が確認できる限り、git-logitselfがグラフの順序付けと印刷を処理するため、これは外部git-logから実行することは完全に不可能です。 。

スクリプト、またはgit-logのパッチが必要な場合があります。誰かがそのようなスクリプトを書くか、2。git作者と話してフラグの--author --date-orderの組み合わせを含めることができるようになるまで、これを開いたままにします。 (=


参考までに、現在の glog function の出力は次のようになり、再注文する必要があります。

glog output

51
ELLIOTTCABLE

gitバージョン1.8.4は、--author-date-order引数をgit logに追加しました。 リリースノート によると、「出力はトポロジ的にソートされ、並行する履歴のコミットは作成者のタイムスタンプに基づいて混在して表示されます。」

64
M Somerville

さて、これを理解するのに非常に長い時間がかかりました( details )。要するに、不完全または不正確な例が多数見つかりました。次のコマンドは、私が期待することthinkを実行します。

$ git log --pretty="format:%at %C(yellow)commit %H%Creset\nAuthor: %an <%ae>\nDate: %aD\n\n %s\n" | sort -r | cut -d" " -f2- | sed -e "s/\\\n/\\`echo -e '\n\r'`/g" | tr -d '\15\32' | less -R

このスクリプトとその他のスクリプトは、GitHubの Git Extras にあります。

23
josephdpurcell

--date-order/--topo-orderは、複数のブランチを同時に実行しているときに、リビジョンリスト内のコミットの順序を実際に制御するだけです。 "x is-a-a-y of y"関係は、コミッター/オーサリングタイムスタンプが遠い過去または未来であってもalways尊重されます。

git log --pretty="format:%at %H" | sort -gのようなものが必要になり、ハッシュをgit logにフィードバックします。

10
jørgensen

Jørgensenが提案したものを基に、探しているものを提供する「ワンライナー」ソリューションがあります。見やすくするためにここでフォーマットされています。改善を歓迎します!

SORTED_GIT_LOGS=$(git log --pretty="format:%at %H" | sort -g | cut -d' ' -f2); \
    IFS=$(echo -en "\n\b"); for LOG in $SORTED_GIT_LOGS; do \
        git show --name-only $LOG; \
    done | less
2
Nate