gpt4 book ai didi

git - 如何生成每个文件类型更改的 Git 统计信息?

转载 作者:行者123 更新时间:2023-12-03 20:25:44 30 4
gpt4 key购买 nike

在 git 存储库中每个文件类型添加和删除了多少行代码?最好能够请求这些过去的统计信息 X提交。所以说我过去会要求这个 100提交,我的预期结果将是这样的:

.css, 100 files changed,  2879 insertions(+), 1134 deletions(-)
.js, 17 files changed, 415 insertions(+), 502 deletions(-)
.php, 6 files changed, 478 insertions(+), 176 deletions(-)
.py, 10 files changed, 156 insertions(+), 56 deletions(-)

这一定是可能的,但我找不到解决方案。我已阅读 this question并尝试使用 GitstatsRepoExplorer .

最佳答案

有两种方法可以计算您想要的数据。其中之一是计算整个提交范围的差异,另一个是单独计算每个提交并对值求和。如果一个文件被多次触摸,后者可能比前者大。既然你没有指定,我就给你看。

要计算前者更简单,您可以使用如下命令:

git diff --numstat BASE_COMMIT.. | ruby -rset -e '
x = {}
while gets
line = $_.chomp.split("\t")
chunks = line[2].split(".")
next if chunks.length == 1
type = chunks[-1]
x[type] ||= [0, 0, Set.new]
2.times { |i| x[type][i] += line[i].to_i }
x[type][2] << line[2]
end
x.sort_by { |(k, v)| k }.each do |(type, (add, del, set))|
puts ".#{type} #{set.length} files changed, #{add} insertions(+), #{del} deletions(-)"
end'

这使用 git diff --numstat处理来自 BASE_COMMIT 的提交到当前分支并运行操作。如果要处理最后一个 X提交,写 HEAD~X .请注意,这会忽略没有后缀的文件,并将二进制文件处理为没有添加或删除行。它也不会生成对齐的列,但您可以根据需要添加它。您还可以使用不同的语言或脚本而不是单行。

如果你想计算所有单独提交的总和,那么替换 git diff用这个调用:
git rev-list BASE_COMMIT.. | xargs -I{} git diff --numstat {}^..{}

关于git - 如何生成每个文件类型更改的 Git 统计信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61679378/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com