我正在运行以下代码
git log --pretty=format: --numstat -- SOMEFILENAME |
perl -ane '$i += ($F[0]-$F[1]); END{print "changed: $i\n"}' \
>> random.txt
这样做需要一个名为“SOMEFILENAME”的文件,并将添加和删除行总量的总和保存到名为“random.txt”的文本文件中
我需要在存储库中的每个文件上运行此程序,并且有一些文件。什么是一种简单的方法呢?
答案 0 :(得分:2)
如果您想要每个文件的总数:
git log --pretty=format: --numstat |
perl -ane'
$c{$F[2]} += $F[0]-$F[1] if $F[2];
END { print "$_\t$c{$_}\n" for sort keys %c }
' >random.txt
如果你想要一个总数:
git log --pretty=format: --numstat |
perl -ane'
$c += $F[0]-$F[1];
END { print "$c\n" }
' >random.txt
他们各自的产出是:
.gitignore 22
Build.PL 48
CHANGES.txt 0
Changes 25
LICENSE 132
LICENSE.txt 0
MANIFEST 18
MANIFEST.SKIP 9
README.txt 67
TODO.txt 1
lib/feature/qw_comments.pm 129
lib/feature/qw_comments.xs 250
t/00_load.t 13
t/01_basic.t 85
t/02_pragma.t 56
t/03_line_numbers.t 37
t/04_errors.t 177
t/05-unicode.t 39
t/devel-pod-coverage.t 26
t/pod.t 17
和
1151
答案 1 :(得分:0)
您可以使用名称find
(代表当前目录)让git
为您提供所有文件,而不是使用.
。有了这个,这是一个使用awk
打印出每个文件的统计数据的版本:
git log --pretty=format: --numstat -- . |
awk '
NF == 3 {changed[$3] += $1 - $2}
END { for (name in changed) { printf("%s: %d changed\n", name, changed[name]); } }
'
更短的一个打印一个整体更改的行:
git log --pretty=format: --numstat -- . |
awk '
NF == 3 {changed += $1 - $2}
END { printf("%d changed\n", changed); }
'
(NF == 3
是考虑到git
似乎在其输出中打印虚假空白的事实。我没有试图弄清楚是否有更好的git
命令。)