我的工具箱(一)—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,非默认)
图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值