git代码量统计.sh脚本

脚本统计的是当月时间范围修改,需要放置到仓库的上一级目录运行,或者根据实际情况修改代码。

运行情况如下:

代码如下:

#!/bin/bash


# 提取当前年份和月份
year=$(date +%Y)
month=$(date +%m)
# 计算本月的第一天和最后一天
first_day="${year}-${month}-01"
last_day=$(date -d "${first_day} +1 month -1 day" +%Y-%m-%d)


# 命令提示符的默认配置
GREEN='\033[0;32m'  # 绿色
PURPLE='\033[0;35m' # 紫色
YELLOW='\033[0;33m' # 黄色
AQUA='\033[0;36m'   # 青色
NC='\033[0m'        # 重置颜色

username=$(whoami)
hostname=$(hostname)
msystem=$MSYSTEM


com_printf_format="新增行数:%s,删除行数:%s,总行数:%s"


# 仓库全路径
function getPath() {
    local path=$(pwd)
	
	if [[ $path == */ ]]; then
		path=${path%?}  # 删除最后一个字符
	fi

    echo $path
}

# 由于无法直接获取命令行提示符内容,通过参数拼接模拟命令行提示符
function getPrompt() {
    echo "$GREEN$username@$hostname $PURPLE$msystem $YELLOW$(getPath) $AQUA($(git rev-parse --abbrev-ref HEAD))$NC"
}

# git命令复用
function getCmdGit() {
    echo "git log --all --author=$(git config user.name) --numstat --pretty=tformat: --after=$first_day --before=$last_day"
}

# 显示的命令内容
function getShowCmd() {
    echo "$ $(getCmdGit) | awk '{ adds += \$1; subs += \$2; loc += \$1 + \$2 } END { printf \"$com_printf_format\\\n\", adds, subs, loc }'"
}

# 执行命令,过滤掉无添加代码的仓库,打印代码统计结果
function runCMD() {
    $(getCmdGit) | awk -v title="$(getPrompt)" -v show_cmd="$(getShowCmd)" -v com_printf_format="$com_printf_format" '
    { adds += $1; subs += $2; loc += $1 + $2 } 
    END { if (adds > 0) { printf "%s\n%s\n'$com_printf_format'\n\n", title, show_cmd, adds, subs, loc } }'
}

#遍历当前路径下文件
for dir in `ls`
do
    # 判断是否为目录
    if [ -d $dir/.git ]; then 
        cd $dir
        runCMD 
        cd ..
    fi
done

# 添加换行
echo -e "\n"

# 等待用户按下回车键
read -p "Press enter to exit..."

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值