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

Posted

技术标签:

【中文标题】在 Git 中查找更改最多的文件【英文标题】:Finding most changed files in Git 【发布时间】:2011-12-02 22:46:16 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您可以执行以下操作:

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

日志仅输出在每次提交中已更改的文件的名称,而其余部分仅排序并输出最常出现的前 10 个文件名。

【讨论】:

您能告诉我这是基于当前分支还是针对整个存储库?尚未合并的分支呢? @KarthickS:这仅适用于当前分支中的提交 - 如果您想在任何本地分支上包含提交,可以将 --branches 添加到 git log 不错。另外,我发现它还报告了很久以前删除的文件。快速解决方法是限制时间,例如:--since="last year" 使用--since "1 month ago" 或其他选项来缩小时间窗口也很有帮助 找到我的部分答案:git log --pretty=format: --since="1 year ago" --name-only -- "*.java" | sort | uniq -c | sort -rg | head -10【参考方案2】:

您可以使用git effort(来自git-extras 包)命令显示有关每个文件的提交次数的统计信息(按提交和活动天数)。

编辑:git 努力只是一个 bash 脚本you can find here,如果您需要更特别的东西,可以适应您的需求。

【讨论】:

输出将是两部分的,首先你得到未排序的结果,然后是排序(和着色)的结果。对吗? @Andy 似乎是(并且git help effort 没有关于它的信息:/)。我假设第一组结果按文件名排序,第二组按每个文件的提交数排序。手册页还提到 github.com/tj/git-extras/issues 报告问题 这个和这个类似吗? blog.riff.org/…【参考方案3】:

我注意到两者 Mark’s 和 sehe’s 答案不会--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

【讨论】:

为了对此进行扩展,我创建了 gist.github.com/caleb15/da591031936f35d80e14a42ca7ba4350 它按文件夹聚合更改,特别是在我的案例中 roles 目录中的每个文件夹,但很容易修改以适应您的用例。【参考方案4】:

老问题,但我认为仍然是一个非常有用的问题。这是直接 powershell 中的一个工作示例。这将获得您的仓库中与您所在的分支相关的前 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

【讨论】:

【参考方案5】:

这是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

【讨论】:

因为对excel不太了解,所以看不懂这些说明。【参考方案6】:

对于 powershell,假设你安装了 git bash

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

【讨论】:

select 是什么? 这是Select-Objectdocs.microsoft.com/en-us/powershell/module/…的默认别名【参考方案7】:
git whatchanged --all | \grep "\.\.\." | cut -d' ' -f5- | cut -f2- | sort | uniq -c | sort

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

【讨论】:

【参考方案8】:

我们还可以找出两个提交或分支之间更改的文件,例如

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

【讨论】:

【参考方案9】:

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

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

【讨论】:

以上是关于在 Git 中查找更改最多的文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Hive 或 Pig 在字段中查找重复次数最多的值

如何查找在熊猫数据框中出现最多的行项目

Js对象(五)如何查找字符串中出现次数最多的字符 2021-11-24

查询 CSV::Table 以在普通的旧 ruby​​ 脚本中查找两个给定日期之间销售额最多的项目

python查找列表中最多的值

查找连续出现最多的数字的算法 - C++