昨天网易云音乐、B站等 APP 都放出了用户的 2018 年度使用报告,在朋友圈掀起了一股年度报告的热潮,我昨天在刷微博时看到”精分君”分享的《年度骂人报告》后,在被笑得眼泪都出来的同时,也在想我是否是也能够出一个《年度代码报告》呢?linux
转载随意,文章会持续修订,请注明来源地址:https://zhenbianshu.github.io 。git
得益于今年工做的稳定,全部本地代码仓库都老实地放在各个 jetBean 软件目录下,并且代码版本控制工具上,工做用 Gitlab,业余用 Github,都属于 git 系列,全部的提交记录均可以从 git log 里查询到,极大地方便了我收集信息。github
使用 git log
命令能够很方便地查看 git 的提交记录,咱们在 git 目录下,不带任何参数使用 git log 命令时,会像日常使用 less 等命令时,进入一个内容浏览界面,在这里,咱们能够翻页从前到后查看全部的 git 提交记录。使用 >
内容重定向符能够把 git log 重定向到指定的文件中,这时候咱们看到的信息以下:shell
commit ee66af2de2e0b11bb9c987969916fcf486c25f1e
Author: zhenbianshu <zhenbianshu@foxmail.com>
Date: Thu Dec 27 19:32:28 2018 +0800
fix site base url;
能够看到,每一条提交记录都被拆分红了多行,并且若是 commit comment 有多行的话,日志会更不规则。git log 提供了 --pretty
参数能够帮助咱们提取指定字段,并将它们集成到同一行。编程
pretty 参数的用法为 git log --pretty="FORMAT"
,如咱们经常使用的 printf 函数同样,能够在 FORMAT 中指定须要字段的占位符,各个字段对应的占位符均可以在 Git 官方文档中查找到,这里我只须要 %h(短 hash)、%cd(完整提交时间)、%s(提交时的 comment)
。less
此外,咱们还能够经过 --after
各 --before
限制 git log 的时间范围,在多人合做的项目中,还须要使用 --author
限定提交的做者,最终完整的命令以下:编程语言
git log --after="2018-01-01" --before="2019-01-01" --author="zhenbianshu" --no-merges --pretty=format:"%h | %cd | %s" >> /tmp/git.log
ide
经过 git log,我拿到像这样的提交信息:81cb3a0bb | Fri Feb 9 10:25:12 2018 +0800 | fix bad smell;
,因为缺乏项目和语言信息,还须要完善一下这些提交信息。函数
首先,在上一步,我将各个项目的 git log 都保存在 项目.log
的文件里了,一共有 20 个项目,意味着我去年向 20 个仓库贡献了代码。 但这些仓库使用的编程语言是无法自动识别的,我只好手动把这些仓库都放到 编程语言
文件夹内,最终的文件目录以下:工具
./C/rsync.log
./go/gotorch.log
./Java/story.log
./shell/video-simulation.log
...
接下来,再把各个文件的的路径名填充到各行后整合到一个文件就好了。
这里我使用了 find、 xargs 和 awk
命令,命令以下:
find . -name "*.log" | xargs -I {} awk -v file="{}" '{print file,$0 }' {} >> /tmp/raw.log
xargs 指定了 {}
做为 find 查到文件的替代符,而后使用 awk 的 -v
选项将文件名做为变量传入每一行。
分析其实挺简单,就是把经常使用的 linux 命令揉合一下,无非是 awk、grep、sort、uniq、wc
等。
主要用到的命令选项是:
grep -e XX -e YY
搜索包含 XX 或包含 YY 的行;grep -E 'regex'
按照正则搜索;awk '{if(A){B}}'
awk 里的条件判断语句。sort -f '*' -kn
以 * 分隔每行后,按第 n 列排序;贴两个所用的分析命令吧。
提交代码最多时段。
我把一天的时间划分为四个时段: 0-6点凌晨、6-12点上午、12-18点午后、18-24点夜晚,对应命令是: awk '{if($6>="00:00:00" && $6<"06:00:00"){print "凌晨"};if($6>="06:00:00" && $6<"12:00:00"){print "上午"};if($6>="12:00:00" && $6<"18:00:00"){print "午后"};if($6>="18:00:00" && $6<="23:59:59"){print "夜晚"};}' git.log | sort | uniq -c
结果是:
5 凌晨
296 上午
679 午后
346 夜晚
提交天数最多的项目。
第二项是项目名,第五项是日期。 awk '{print $2,$5}' | sort | uniq | awk '{print $1}' | sort | uniq -c
数据分析出来以后,就是处理图片了。
我是在网易云音乐年度听歌报告的基础上改的(不用做商业,应该没问题吧,有问题请私我),因此须要一个像 Photoshop 同样的 P 图工具,在 Mac 上推荐用 Pixelmator
,功能上跟 Photoshop 没什么区别,但软件大小才 100 多 M,比动辙 1G 多的 Photoshop 好多了。
软件工具上,主要用了补丁、文字、选区、裁剪、取色、倒色、图层等工具,以前有些 Ps 基础,用起来很简单。
而后就是成果展现了,有些地方抹花了,凑合看吧~
作些有意思的事,代码写起来更欢快了呢~
另外,shell 用着真舒服~
关于本文有什么疑问能够在下面留言交流,若是您以为本文对您有帮助,欢迎关注个人 微博 或 GitHub 。您也能够在个人 博客REPO 右上角点击 Watch
并选择 Releases only
项来 订阅
个人博客,有新文章发布会第一时间通知您。