我的工具箱(一)—git项目提交行数统计脚本
在工作的时候,我常常会需要关注很多的信息。
工作在git项目上,平常会去关注的主要是某一条提交记录是谁提交的,改动了什么。然而跳出纯粹的开发工作,还可以看到一些隐藏在其中的数据,想想也是挺有趣的。
其中有一项最为直观的数据,代码行数。
之前看到过一条命令,作用是统计自己提交过的代码中增加的行数和减少的行数,以及总计行数
git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "Added lines: %s Removed lines : %s Total lines: %s\n",add,subs,loc }' -
很可惜的是,由于代码库的庞大,以及统计的范围包括了整个项目,每次我使用的时候,总会报一堆警告。更有甚者,我的总代码行数居然是负的,这简直不能忍受。
warning: inexact rename detection was skipped due to too many files. Added lines: 4870052 Removed lines : 5867815 Total lines: -997763
这条命令的基础是git log
,那么,就从它开始改进。
# 摘自 Git Manual git log [<options>] [<revision range>] [[--] <path>...]
很清楚了,需要给git log
加上路径以限定统计的范围。
git log --author="$(git config --get user.name)" --pretty=tformat: --numstat -- src | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "Added lines: %s Removed lines : %s Total lines: %s\n",add,subs,loc }' -
运行,得到结果如下。
Added lines: 128517 Removed lines : 92160 Total lines: 36357
数据出来了,再加个色吧,看着对比更清晰些。增加的绿色,删除的红色,总计的蓝色。
git log --author="$(git config --get user.name)" --pretty=tformat: --numstat -- src | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "Added lines: \033[32m%s\033[0m Removed lines : \033[31m%s\033[0m Total lines: \033[34m%s\033[0m\n",add,subs,loc }' -
到了这一步,完全可以用了。不过呢,这会把历史提交全拉出来统计,日常工作我会更加在意最近一段时间的数据,1天/3天/1周/1月的。改一下也很简单,git log --since=1.day
这样就限定了只拉取最近一天提交了。然后再加个表格,加点基本信息,写成一个独立的脚本,搞定。
#!/bin/sh # # 统计提交行数 # 统计范围: src if [[ ! -d '.git' ]]; then echo 'Not a git repository' exit fi echo 'name '$(git config --get user.name) echo 'email '$(git config --get user.email) echo 'remote url '$(git config --get remote.origin.url) echo 'branch '$(git symbolic-ref --short -q HEAD) echo '\033[2m┌──────────┬─────────────┬───────────────┬─────────────┐\033[0m' echo '\033[2m|\033[0m Time \033[2m|\033[0m Added lines \033[2m|\033[0m Removed lines \033[2m|\033[0m Total lines \033[2m|\033[0m' git log --author="$(git config --get user.name)" --since=1.day --pretty=tformat: --numstat -- src | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "\033[2m|\033[0m 1 day \033[2m|\033[0m \033[32m%11s\033[0m \033[2m|\033[0m \033[31m%13s\033[0m \033[2m|\033[0m \033[34m%11s\033[0m \033[2m|\033[0m\n", add, subs, loc }' - git log --author="$(git config --get user.name)" --since=3.day --pretty=tformat: --numstat -- src | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "\033[2m|\033[0m 3 days \033[2m|\033[0m \033[32m%11s\033[0m \033[2m|\033[0m \033[31m%13s\033[0m \033[2m|\033[0m \033[34m%11s\033[0m \033[2m|\033[0m\n", add, subs, loc }' - git log --author="$(git config --get user.name)" --since=1.week --pretty=tformat: --numstat -- src | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "\033[2m|\033[0m 1 week \033[2m|\033[0m \033[32m%11s\033[0m \033[2m|\033[0m \033[31m%13s\033[0m \033[2m|\033[0m \033[34m%11s\033[0m \033[2m|\033[0m\n", add, subs, loc }' - git log --author="$(git config --get user.name)" --since=1.month --pretty=tformat: --numstat -- src | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "\033[2m|\033[0m 1 month \033[2m|\033[0m \033[32m%11s\033[0m \033[2m|\033[0m \033[31m%13s\033[0m \033[2m|\033[0m \033[34m%11s\033[0m \033[2m|\033[0m\n", add, subs, loc }' - echo '\033[2m└──────────┴─────────────┴───────────────┴─────────────┘\033[0m'
呐,这就是最终效果了(终端配色方案为Dracula,非默认)
相关推荐
formula 2020-11-12
huhongfei 2020-11-05
乾坤一碼農 2020-10-27
liumengyanysu 2020-10-22
E哥的aws认证攻略 2020-10-15
guying 2020-10-05
好脑筋不如烂笔头 2020-09-17
baolen 2020-08-15
Equation 2020-08-09
Balmunc 2020-08-02
fenggou 2020-07-18
zhangxing 2020-07-05
loganwz 2020-07-05
iamjiyu 2020-07-21
tianyafengxin 2020-10-08