2017-02-07 7 views
2

先月の "ファイル - >時間の変更"のリストを印刷するにはどうしたらいいですか?私はGitのファイル概要 - >先月に変更された時間

git log --name-only --pretty=format: --since '1 month ago' --no-merges | sort | uniq -c | sort -n 

と密接得ることができますしかし、それはあまりにも人がマスターにそれらをマージする前にそれらをスカッシュしていない枝上のファイルにペナルティを課します。私は、ファイルへの1つの変更として、マージする1回のマージでコミットを数えたいだけです。

答えて

0

それはあなたがおそらく欠けていたもののように単純ではないのですが、私はこのような何かが動作するはずだと思う:

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条件が使用されているのは、上記のように、元のリストにファイルを変更して戻した別のブランチの変更が含まれている可能性があるからです。

関連する問題