Gitリポジトリ内の複数のファイルの最後のコミット日付を取得するには、どのファイルが最も簡単ですか(つまり、各ファイルについて、そのファイルを変更した最後のコミットの日付)?Gitで複数のファイルを最後にコミットした日付を取得するには?
これは私が他のBashコマンドを使用していくつかの基準に合った長いファイルリストを見つけ出していて、このリストをGitコマンドにパイプしてそれぞれの最終コミット日付を取得したいのですファイル。
Gitリポジトリ内の複数のファイルの最後のコミット日付を取得するには、どのファイルが最も簡単ですか(つまり、各ファイルについて、そのファイルを変更した最後のコミットの日付)?Gitで複数のファイルを最後にコミットした日付を取得するには?
これは私が他のBashコマンドを使用していくつかの基準に合った長いファイルリストを見つけ出していて、このリストをGitコマンドにパイプしてそれぞれの最終コミット日付を取得したいのですファイル。
次のコマンドは役に立ちます。
git log -1 --format=%cd filename.txt
これは、一つのファイルの最新の変更日付を印刷します。 -1
には1つのログエントリ(最新のもの)が表示され、--format=%cd
にはコミット日付が表示されます。オプションの詳細については、git-log
のドキュメントを参照してください。
ファイルのグループに対してこれを簡単に拡張できるはずです。
これは役に立ちます。次のようなものよりも、各ファイルの名前を日付に付ける方がいいですか? 'for x in $(some-command);エコーを行う$ x $(git log -1 --format =%cd $ x);済んだ? – jonderry
すべての '%'書式コードが個々の*ファイル*ではなく*コミット*を参照しているので、そうは思わない。 「エコー」はそこで最も簡単な方法かもしれません。 –
「%ci」はISO(ish)形式の日付を出力します。あなたはそれらを並べ替えることができます。また、 '%ai'は、コミッターの日付ではなく、著者の日付を出力します。 –
少し広がっているGregの答えでは、git log
は引数に複数のパスを取ることができます。これらのパスを含むコミットのみが表示されます。そのため、最新のファイルのグループのコミットを取得します
git log -1 --format=%cd -- fileA.txt fileB.txt fileC.txt
私はシェルスクリプトでかなりゴミので、私は、配管を経由して、そのコマンドを構築する方法を正確にわからないんだけど、多分それはなるだろう別の質問の良い話題。
そうですが、それは各ファイルの最新のコミット*ではなく、すべてのファイルのコミットの中で最新のコミットを返します。 – Cameron
これは動作しますが、悲しいことにTravisCI環境内にはありません。 TravisCIがレポをクローンすると、すべてのファイルの日付は、レポに含まれている日付と時刻ではなく、現在の/今日のクローンの日付と時刻になります。非常にイライラ。 – MitchellK
他の誰かが興味を持っている場合は、TravisCIの問題をここに記録しました。> https://github.com/travis-ci/travis-ci/issues/8539 – MitchellK
ここで見つけるを使用して1つのライナー(読みやすくするために、いくつかに分かれますが、末尾のバックスラッシュのおかげで、コピー&ペーストが動作するはず)だ:TRとのsedでマングル過度に複雑な改行はただそこにある
find <dirs...> -name '<pattern>' <any other predicate to get what you want> \
-exec git log -1 --format="AAA%ai NNN" '{}' \; \
-exec echo '{}' XXX \; \
| tr \\n N | sed -e 's/AAA/\n/g' | sed -e 's/NNNN/ /g' -e 's/XXX.*//g'
1行に日付とファイル名を取得し、追跡されていないファイルは無視します。あなたはあなたのファイルにこれらのばかげたマーカーAAA XXX NNNNが含まれていないことを確認する必要があります。
gitエイリアスを作成することができましたか、それともダンプファイルをダンプすることができましたか?私はファイルとフォルダ/ファイルなどを持つ親フォルダを持っています。私はそのフォルダ内の何かが最後に変更されたことを見たいと思っています。 – Terry