Bootstrap

How to use the ‘git log‘ command to get change log for each file?

1. Using 'git log' command

#!/bin/bash

# 目标文件名
output_file="git_log.csv"

# 打印 CSV 文件的标题行
echo "CommitID,Author,Author Email,Date,Added-Lines Removed-Lines File" > $output_file
echo "CommitID,Author,Author Email,Date,Added-Lines Removed-Lines File"

# 运行 git log 命令并解析输出
git log --pretty=format:"commit^%H^%an^%ae^%ad" --numstat --date=iso | awk -v OFS=',' '
  BEGIN { FS="^" }
  /^commit/ {
    commit=$2;
    author=$3;
    email=$4;
    date=$5;
  }
  /^[0-9]/ {
    numstat=$1
    # added_lines=$1;
    # removed_lines=$2;
    # file=$3;
    # print commit,author,email,date,added_lines,removed_lines,file >> "'$output_file'";
    # can't find a solution to split numstat column
    print commit,author,email,date,numstat >> "'$output_file'";
    print commit,author,email,date,numstat;
  }
'

2. 这段脚本的目的是从 Git 仓库中提取提交日志信息,并将其格式化为 CSV 文件 git_log.csv

  • 运行 git log 命令: git log 命令用于生成提交日志。选项 --pretty=format:"commit^%H^%an^%ae^%ad" 指定自定义的日志输出格式,包含提交哈希 (%H)、作者 (%an)、作者的邮箱 (%ae) 和提交日期 (%ad)。 --numstat 则输出每个提交的文件统计信息(新增行和删除行)。
  • 解析 git log 输出: 使用 awk 解析 git log 的输出,并格式化为 CSV。
  • BEGIN 块:设置字段分隔符为 ^
  • 匹配 commit:每当检测到含 commit 关键字的行时,将信息拆解到相应的变量中。
  • 匹配文件统计信息行:匹配以数字开头的行(表示新增和删除的行数及文件)。将这些行的相关信息保存到变量,然后打印至 CSV 文件和终端。
;