Git命令扫描频繁修改代码热力图以提高代码质量

对于大型复杂架构的产品代码,如何知道哪些是被频繁修改的?哪些不稳定或蕴含了潜在的缺陷或者需要频繁的回归测试,以保证持续交付的质量?如果能根据代码痕迹画出热力图或云图。据此就能找到那些不稳定的模块和代码,调动人员review这些代码,分析导致变动的原因,解决那些不稳定因素,不管是耦合问题,还是抽象层次问题,那么代码的质量会直线上升,程序员工作量就会直线下降。

Git Log加命令行管道

git log命令的结果中包含了所有的提交信息,可以通过参数只筛选出文件名,然后先按照文件名进行排序(sort),然后用(uniq)命令来统计每个文件名出现的次数,然后再按次数排序(sort),最后是(head)命令来找出提交次数最多的10个,即是那些被频繁修改的代码文件。

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

管道命令可以任意拼接,比如只想从所有C#代码里面来扫描,就再加一个grep管道来过滤即可:

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

Git Effort

如果你在安装GIT命令行时安装了附加工具包git-extras,就可以用git-effort命令来扫描, 它会列出你的仓库中所有文件及提交次数。例如,你可以用下列命令来忽略少于4次提交的文件:

git-effort --above 4

好用的Git config 缩写配置

初次安装运行Git,建议在命令行中运行以下命令,配置缩写和颜色,支持中文文件名显示和提交等。
可以有效提高效率。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
git config --global --add user.email mebusw@163.com
git config --global --add user.name JackyShen
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.last 'log -1 HEAD'
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
git config --global alias.co checkout
git config --global core.quotepath false
git config --global merge.tool kdiff3
git config --global meregtool.kdiff3.path /usr/bin/kdiff3
git config --global alias.visual !gitk

建立忽略文件 ~/.gitignore_global

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
*.pyc

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log
*.sql
*.sqlite

# OS generated files #
######################
.DS_Store*
ehthumbs.db
Icon?
Thumbs.db
.svn
*.bak