在 Git 中查找更改最多的文件

如何在 Git 中显示更改最频繁的文件?

22795 次浏览

你可以这样做:

git log --pretty=format: --name-only | sort | uniq -c | sort -rg | head -10

日志只输出在每次提交中更改的文件的名称,其余部分只排序并输出出现频率最高的10个文件名。

我们还可以找到在两次提交或分支之间更改的文件,例如。

git log  --pretty=format: --name-only <source_branch>...<target_branch> | sort | uniq -c | sort -rg | head -50

对于 powershell,假设您已经安装了 git bash

git log --pretty=format: --name-only | sort | uniq -c | sort -Descending | select -First 10

这可能是显而易见的,但是,所提供的查询将显示所有文件,但是,您可能不想知道您的配置或项目文件是最新的。一个简单的 grep 将隔离到您的代码文件,例如:

git log --pretty=format: --name-only | grep .cs$ | sort | uniq -c | sort -rg | head -20

我注意到两者都有 马克的 还有 是的 答案不 --follow的文件,也就是说他们停止一旦他们到达一个文件重命名。这个脚本会慢很多,但是可以为此目的工作。

git ls-files |
while read aa
do
printf . >&2
set $(git log --follow --oneline "$aa" | wc)
printf '%s\t%s\n' $1 "$aa"
done > bb
echo
sort -nr bb
rm bb
git whatchanged --all | \grep "\.\.\." | cut -d' ' -f5- | cut -f2- | sort | uniq -c | sort

如果只想查看文件,请将 --author添加到 git whatchanged --author=name --all

这是一个 Windows 版本

git log --pretty=format: --name-only  > allfiles.csv

然后打开 Excel

A1: FileName
A2: isVisibleFilename  >> =IFERROR(IF(C2>0,TRUE,FALSE),FALSE)
A3: DotLocation >> =FIND("@",SUBSTITUTE(A2,".","@",(LEN(A2)-LEN(SUBSTITUTE(A2,".","")))/LEN(".")))
A4: HasExt       >> =C2>1
A5: TYPE        >> =IF(D2=TRUE,MID(A2,C2+1,18),"")

创建枢轴表

values: Type
Filter: isFilename = true
Rows : Type
Sub : FileName


click [Count Of TYPE] -> Sort -> Sort Largest To Smallest

您可以使用 git effort(来自 git-extras包)命令,该命令显示每个文件提交多少次(按提交日和活动日计算)的统计数据。

编辑: git 工作是 只是一个 bash 脚本 你可以在这里找到和适应您的需要,如果您需要更特殊的东西。

老问题了,但我觉得还是个很有用的问题。这里是一个直动力外壳的工作示例。这将获得前10名最改变的文件在您的回购相对于分支您是在。

git log --pretty=format: --name-only | Where-Object { ![string]::IsNullOrEmpty($_) } | Sort-Object | Group-Object  | Sort-Object -Property Count -Descending | Select-Object -Property Count, Name -First 10

一个具有更灵活过滤器的简单节点工具是 Git-Heat Map。 在项目的文件夹中运行 git-heatmap,它将迭代最后1000次提交,并生成更改最多的文件的热图。 您可以检查 git-heatmap -h以获得更多的过滤器。

enter image description here