如何搜索我的git日志以查看哪些文件的活动最多?
答案 0 :(得分:39)
这些事情之一很容易,偶然(?):
git rev-list --objects --all | awk '$2' | sort -k2 | uniq -cf1 | sort -rn | head
输出类似于
1058 fffcba193374a85fd6a3490f800c6901218a950b src
715 ffffe0f08798e95b66cc4ad4ff22cf10734d045e src/lib
450 ffcfe596031a5985664e35937fff4ac9ff38dcca src/zfs-fuse
367 ffc5d5340f95360fc9f7b739c5593dd3f92fced0 src/lib/libzpool
202 ff92db000792044d45eec21c57a3cd21618631e7 src/lib/libsolkerncompat
183 ff1a44edae3fd121ddd86864b589e5ab2f9ff99b src/lib/libzfscommon
178 fec6b3a789e578983c2242b3aa5adf217cb8b887 src/lib/libzfs
168 ffeefc9e81222d7c471bdb0911d8b98f23cff050 src/cmd
167 fbd60bd3430765863648c52db7ceb3ffa15d5e50 src/lib/libzfscommon/include
155 ff225f6b41f9557d683079c5f9276f497bcb06bd src/lib/libzfscommon/include/sys
你可以从这里拿走它。
git rev-list --objects --all | awk '$2' | sort -k2 | uniq -cf1 | sort -rn |
while read frequency sample file
do
[ "blob" == "$(git cat-file -t $sample)" ] && echo -e "$frequency\t$file";
done
<强>输出强>:
135 src/zfs-fuse/zfs_operations.c
84 src/zfs-fuse/zfs_ioctl.c
79 src/zfs-fuse/zfs_vnops.c
73 src/lib/libzfs/libzfs_dataset.c
67 src/lib/libzpool/spa.c
66 src/zfs-fuse/zfs_vfsops.c
62 src/cmd/zdb/zdb.c
62 CHANGES
60 src/cmd/ztest/ztest.c
60 src/lib/libzpool/arc.c
你可以拥有rev-list
部分的球:
git rev-list --after=2011-01-01 --until='two weeks ago' \
tag1...remote/hotfix ^master
仅使用指定日期范围内的修订版,即tag1
和remote/hotfix
的对称集合差异,并且
答案 1 :(得分:4)
使用git effort [--above <value>]
(来自git-extras包)列出所有文件和相关提交的数量。
您可以限制为路径
答案 2 :(得分:1)
这是一个python脚本,您可以通过管道日志--numstat输出来获取结果:
import sys, re
res = {}
while 1:
line = sys.stdin.readline()
if len(line) == 0:
break;
m = re.match("([0-9]+)[ \t]+([0-9]+)[ \t]+(.*)", line)
if m != None:
f = m.group(3)
if f not in res: res[f] = {'add':0, 'rem':0, 'commits':0}
res[f]['commits'] += 1
res[f]['add'] += int(m.group(1))
res[f]['rem'] += int(m.group(2))
for f in res:
r = res[f]
print "%s %s %s %s"%(r['commits'], r['add'], r['rem'], f)
您可以根据需要对其进行修改,以对您希望的方式进行排序/过滤。
答案 3 :(得分:0)
假设您要选择的修订范围是<range>
,则命令为:
git log --format=%n --name-only <range>|sort|uniq -c|tail -n +2
将为您的存储库的每个文件输出提交差异中出现的次数,即更改次数,包括作为更改创建的文件。保持<range>
为空以获取从初始提交到分支HEAD
的统计信息。
答案 4 :(得分:0)
我最近在一个源代码完全由 java 文件组成的项目中需要类似的东西。与我用作此基础的 sehe 的答案类似,并在我想在没有循环的情况下在一行中进行扩展时进行了扩展。我的问题是变化最大的前 5 个文件是什么?
git rev-list --objects --all | awk '$2 ~ /\.java/' | awk '{print $2}' | sort -k2 | uniq -c | sort -rn | head -n 5
分解:
输出是
130 richtextfx/src/main/java/org/fxmisc/richtext/GenericStyledArea.java
126 richtextfx/src/main/java/org/fxmisc/richtext/StyledTextArea.java
58 richtextfx/src/main/java/org/fxmisc/richtext/ParagraphText.java
47 richtextfx/src/main/java/org/fxmisc/richtext/EditableStyledDocument.java
43 richtextfx/src/main/java/org/fxmisc/richtext/skin/StyledTextAreaVisual.java