我正在研究由几个技术水平差异很大的人编写的程序。那里的文件从未改变过(可能永远不会,因为我们害怕触摸它们)和其他不断变化的文件。
我想知道,是否有任何工具可以查看整个仓库历史记录(git
)并生成对给定文件更改频率的分析?还是打包?还是项目?
认识到(例如)我们花费25%的时间在一组软件包上工作是有价值的,与“正常工作”的代码相比,这将是指示性或代码的脆弱性。
答案 0 :(得分:11)
如果您正在寻找操作系统解决方案,我可能会考虑从gitstats开始,并通过抓取文件日志并聚合该数据来扩展它。
答案 1 :(得分:8)
我看一下NChurn:
NChurn是一个实用程序,可帮助评估文件的流失级别 你的存储库。流失可以帮助您检测哪些文件被更改了 大多数人在他们的一生中。这有助于识别潜在的漏洞荨麻疹 不正确的设计。最好的办法是将NChurn插入你的构建中 每次运行的过程和存储历史记录。然后,你可以绘制 存储库流失的演变。
答案 2 :(得分:5)
我写了一些东西,用于成功地可视化这些信息。
https://github.com/bcarlso/defect-density-heatmap
看看项目,您可以看到自述文件中的输出结果。
首先从Git获取每个提交中已更改的文件列表,即可完成所需的操作。
~ $ git log --pretty="format:" --name-only | grep -v ^$ > file-changes.txt
~ $ for i in `cat file-changes.txt | cut -d"." -f1,2 | uniq`; do num=`cat file-changes.txt | grep $i | wc -l`; if (( $num > 1 )); then echo $num,0,$i; fi; done | heatmap > results.html
这将为您提供一个标签云,其中包含的文件会更多地显示更大的文件。
答案 3 :(得分:4)
我建议使用像
这样的命令git log --follow -p file
这将为您提供历史记录中文件发生的所有更改(包括重命名)。如果要获取更改文件的提交数,则可以在基于UNIX的操作系统上执行:
git log --follow --format=oneline Gemfile | wc -l
然后,您可以创建一个bash脚本,将其应用于名称旁边的多个文件。
希望它有所帮助!
答案 4 :(得分:2)
基于之前的回答,我建议使用以下脚本来解析所有项目文件
#!/bin/sh
cd $1
find . -path ./.git -prune -o -name "*" -exec sh -c 'git log --follow --format=oneline $1 | wc -l | awk "{ print \$1,\"\\t\",\"$1\" }" ' {} {} \; | sort -nr
cd ..
如果您将脚本称为file_churn.sh,则可以解析调用
的git项目目录> ./file_churn.sh project_dir
希望它有所帮助。