背景
日常工作周报需要总结上周的主要工作,开发了哪些需求解决了哪些bug,通过git提交日志来呈现是比较客观的,本文介绍如何使用shell调用git命令获取自己上周的git提交记录。
分析
脚本涉及到几个关键点:
- 获取提交作者信息:读取git config获取author;
- 获取当天及一周前的日期:使用date命令获取;
- 获取git一段日期范围内的提交记录:使用git log命令获取;
脚本实现
mac系统可直接使用:
#!/bin/bash
function isMacOS() {
# Mac下date命令式BSD(Berkeley Software Distribution)系的,
# Linux 下date命令式GNU(GNU’s Not Unix)系,二者用法有一些区别。
# BSD并不是特指定任何一个BSD衍生版本,而是类UNIX操作系统中的一个分支的总称。
# Mac OS X 和 iOS实际上基于 Darwin,Darwin是BSD其中一个分支。
uNames=$(uname -s)
osName=${uNames: 0: 4}
if [ "$osName" == "Darw" ] # Darwin, AKA "Mac OS X"
then
echo 0
elif [ "$osName" == "Linu" ] # Linux, AKA "GNU/Linux"
then
echo 1
elif [ "$osName" == "MING" ] # MINGW, windows, git-bash
then
echo 2
else
echo 3
fi
}
is_mac=$(isMacOS)
author_name=$(git config -l|grep user.name=|cut -c11-)
if [ -z "$author_name" ]; then
echo "[ERR]: Can not determine username for git, please check user.name"
exit 1
fi
now_date=$(date +%Y-%m-%d)
if [ "$is_mac" ];
then
# Mac , 通过-v参数,-v-1d 代表前一天,-v-1y代表上一年
last_week=$(date -v-7d +%Y-%m-%d)
else
# Linux,通过–date参数实线,–date=“-1 day” 代表前一天, –date=“-1 year” 代表上一年
last_week=$(date -date="-7 day" +%Y-%m-%d)
fi
git log --oneline --since="$last_week" --until="$now_date" --author="$author_name" | awk '{ print $2$3}'