我的工具箱(一)—git项目提交行数统计脚本

摸鱼高手
• 阅读 4915

在工作的时候,我常常会需要关注很多的信息。
工作在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,非默认)
我的工具箱(一)—git项目提交行数统计脚本

点赞
收藏
评论区
推荐文章
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
科林-Colin 科林-Colin
4年前
Vue跨域解决方法
vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报“No'AccessControlAllowOrigin'headerispresentontherequestedresource.”这种跨域错误。要想本地正常的调试,解决的办法有三个:
Wesley13 Wesley13
3年前
(转)通过gitlab统计git提交的代码量
git的代码量大多数都是根据命令行统计,或者根据第三方插件统计。但是都不满足我的需求,因为我们代码都由gitlab管理,于是想到了通过gitlab暴露出来的接口获取数据。第一步,生成私钥登录你的gitlab申请私钥private\_token!(https://img2018.cnblogs.com/blog/1117944
Stella981 Stella981
3年前
Intellij idea利用Statistic插件统计项目代码行数
1.插件介绍统计项目中各个文件的数量,大小,行数,平均等信息根据扩展名自定义统计详细行数信息,包括总行数,代码行数,代码行数占比,注释行数,注释行数占比,空白行数,空白行数占比自定义选择多个文件,统计各个文件信息本插件需要JDK8或以上版本2.插件安装利用在线或离线方式安装Statistic插件到idea中
Stella981 Stella981
3年前
Git 对已经加入版本控制的文件,修改后希望不被提交办法
问题举例:假设网站有一个数据库配置文件db.php,通过git做版本控制,已经将这个文件提交到git库中。但是本地的数据库配置是读取的本地数据库,所以希望这个db.php文件在每次提交代码的时候不被提交。说明:通过.gitignore是无法办到的,因为db.php已经加入版本控制了解决办法:复制代码执行命令将db.php加入不提交队列
Stella981 Stella981
3年前
Git 实战教程
1.Git配置使用Git的第一件事就是设置你的名字和email,这些就是你在提交commit时的签名,每次提交记录里都会包含这些信息。使用gitconfig命令进行配置:​$gitconfigglobaluser.name"ilimhumar"$gitconfigglobal
Wesley13 Wesley13
3年前
03.基础、jfinal、架构等啊和类包
继续更新,前面说了基本功能要求,下面更新代码等。基础框架用的bootswatchbeetljfinal。整体项目已经提交到git(https://www.oschina.net/action/GoToLink?urlmailto%3Agit%40osc)@osc(http://my.oschina.net/guest),不是完全版
Stella981 Stella981
3年前
Git客户端图文详解如何安装配置GitHub操作流程攻略
Git介绍分布式:Git版本控制系统是一个分布式的系统,是用来保存工程源代码历史状态的命令行工具;保存点:Git的保存点可以追踪源码中的文件,并能得到某一个时间点上的整个工程项目额状态;可以在该保存点将多人提交的源码合并,也可以会退到某一个保存点上;Git离线操作性:Git可以离线进行代码提交,因此它称得上是完全的
Stella981 Stella981
3年前
Git提交规范流程和解决冲突实际使用
前言:GIT对于我们程序员来说是吃饭的工具,本篇主要是针对提交和分支以及对于大多数程序员闻风丧胆的冲突一些个人见解,如果有啥不对的或者你们公司git提交流程欢迎下方评论。在讨论规范之前,我们需要定最基本的要求1.团队内保持良好的代码格式便于易读和维护,最主要减少不必要的代码冲突(建议统一使用开发工具(idea)的代码格式化)。2.提交任何代码必须
子桓 子桓
1年前
数据分析软件推荐WaveMetrics Igor Pro 9激活最新
WaveMetricsIgorPro9是一款功能全面、操作简便的科学计算和数据分析软件,适用于在Mac操作系统上进行数据分析和研究工作。数据处理功能强大:支持多种数据格式的导入和处理,包括Excel、ASCII、MATLAB等,可以进行数据拟合、统计分析、
小万哥 小万哥
1年前
Git 版本控制系统的完整指南
什么是Git?Git是一个流行的版本控制系统。它是由LinusTorvalds于2005年创建的,自那时以来由JunioHamano维护。它用于:跟踪代码更改跟踪谁做出了更改编写协作Git做什么?使用仓库管理项目克隆项目以在本地副本上工作使用暂存和提交来控