分享一个生成每周 git commit 并格式化的小脚本

2,795 阅读3分钟

在工作中,撰写总结和周报是一项重要任务,尤其是当我们需要回顾和汇报近期的工作进展时。为了提高效率并准确地记录工作内容,将 Git 提交记录整理成易于阅读和分析的格式是一种常见需求。为此,我们可以采用一些脚本和命令行工具来自动化这一过程,从而节省时间和精力。

在日常工作中,尤其是周五或工作总结时,整理近期的 Git 提交记录变得尤为重要。传统的手动查阅提交信息不仅耗时,而且容易遗漏细节。为了解决这个问题,我们可以借助 Git 命令和脚本来自动化这一过程。通过脚本,我们可以按日期分组整理提交记录,并以清晰的格式展示,方便快速回顾和总结。

近期经常要写工作总结也就是周报了

于是出现一个需求将近期我的 commit 导出来

下面一步步打磨一下优化流程

CV 大法

打开 Git Branch 列表将 commit 一条一条打开然后 CV commit

初步方案

使用 Git 命令按指定日期列出提交记录。这种方法直接但可能不够灵活。

git log --since="2024-07-31 00:00" --until="2024-07-31 23:59" --pretty=format:"%s" --date=short

改进方案

进一步优化,按日期范围自动列出最近五天的提交记录,并将日期和星期格式化为易读的中文格式。这种方法不仅提高了效率,还使得总结更具可读性。

打印近五天的 Git commit (一般我是在周五做总结)

并且按照 YYYY年MM月DD日 WEEKDAY 的格式进行分组展示

for i in {4..0}; do
  date=$(date -v-"$i"d +%Y年%m月%d日)
  weekday=$(date -v-"$i"d +%u)
  case $weekday in
    1) weekday="星期一";;
    2) weekday="星期二";;
    3) weekday="星期三";;
    4) weekday="星期四";;
    5) weekday="星期五";;
    6) weekday="星期六";;
    7) weekday="星期天";;
  esac
  echo "$date $weekday:"
  git log --since="$(date -v-"$i"d +%Y-%m-%d) 00:00" --until="$(date -v-"$i"d +%Y-%m-%d) 23:59" --pretty=format:"%s"
  echo
done

解释

for i in {4..0}; do

这个循环从4开始,到0结束。表示从最近的五天(包括今天)逐渐向过去推移。

date=(datev"(date -v-"i"d +%Y年%m月%d日)

date -v-"$i"d 用来计算当前日期减去 i 天的日期。

+%Y年%m月%d日 格式化输出日期为 2024年08月02日 这样的格式(年份、月份、日期)。

weekday=(datev"(date -v-"i"d +%u)

+%u 用来获取当前日期的星期几,返回1(星期一)到7(星期天)之间的数字。

case $weekday in ... esac

case 语句用来将数字星期几转换为中文格式。

例如,如果 $weekday 是1,weekday="星期一" 就会被设置为“星期一”。

echo "datedate weekday:"

打印出格式化后的日期和中文星期,例如 2024年08月02日 星期五:。

git log --since="(datev"(date -v-"i"d +%Y-%m-%d) 00:00" --until="(datev"(date -v-"i"d +%Y-%m-%d) 23:59" --pretty=format:"%s"

git log 命令获取指定日期范围内的提交记录。

--since 和 --until 用来指定日期范围,从00:00到23:59。

--pretty=format:"%s" 格式化输出提交信息,只显示提交信息(不显示其他信息如提交者等)。

echo

输出一个空行,以便更清晰地分隔不同日期的提交记录。

进一步提升

将输出格式化为 Markdown,便于直接插入到报告或文档中,使总结更加专业和易于分享。

for i in {4..0}; do
  date=$(date -v-"$i"d +%Y年%m月%d日)
  weekday=$(date -v-"$i"d +%u)
  case $weekday in
    1) weekday="星期一";;
    2) weekday="星期二";;
    3) weekday="星期三";;
    4) weekday="星期四";;
    5) weekday="星期五";;
    6) weekday="星期六";;
    7) weekday="星期天";;
  esac
  echo "## $date $weekday"
  git log --since="$(date -v-"$i"d +%Y-%m-%d) 00:00" --until="$(date -v-"$i"d +%Y-%m-%d) 23:59" --pretty=format:"- %s"
  echo
done

输出结果

## 2024年08月02日 星期五
- 修复了某个问题
- 更新了文档

## 2024年08月01日 星期四
- 添加了新功能
- 进行了性能优化

## 2024年07月31日 星期三
- 修复了bug
- 改进了用户界面

通过这些优化步骤,我们不仅能够准确记录每一天的工作进展,还能提高工作总结的效率和质量。