それはあなたがおそらく欠けていたもののように単純ではないのですが、私はこのような何かが動作するはずだと思う:
for f in $(git log --name-only --pretty=format: --since '1 month ago' | sort | uniq); do
n=$(git log --first-parent --full-history --oneline --since '1 month ago' -- $f | wc -l)
if (($n > 0)); then
printf '%8s %s\n' $n $f
fi
done | sort -n
それはより複雑になり、問題がマージコミットのため--name-only
は何も表示されないということです。しかし、がのマージコミットを望んでいる場合は、実際にマージコミットを作成しない限り、レポで作業しているすべての人がgit merge --squash
を使用していなければなりません。誰も直接マスターにコミットしていない場合は、希望する履歴はのみで、これらのファイルを変更したマスターにマージされます。
最初の行は既に持っている行に似ています。これは、過去1か月に変更されたすべてのファイルを提供します。リストから始め、後でコミットの数を計算します。これは、誰かがファイルを変更した後に変更した他のブランチでの変更を含む可能性があることに注意してください。しかし、これは必要です。なぜなら、マージにはファイルがリストされていないので、他のすべてを調べる必要があるからです。
第2のgit log
コマンドは、各ファイルのコミット数を計算します。 --first-parent
オプションを指定すると、各マージコミットの最初の親をたどるだけです。したがって、がに変更されたマスターブランチまたは変更がにマージされた変更がマスターブランチにのみ表示されます。 --full-history
オプションが使用されます。これは、「非面白い」と判断された場合、出力がgit log
の出力に表示されないことがあるためです。詳細については、git log
のドキュメントのHistory Simplificationセクションを参照してください。
$n > 0
条件が使用されているのは、上記のように、元のリストにファイルを変更して戻した別のブランチの変更が含まれている可能性があるからです。