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 文件和终端。