This commit is contained in:
binghuai
2025-11-27 11:02:31 +08:00
parent 6f1e3556a9
commit 1b133175a2
9 changed files with 484 additions and 53 deletions

View File

@@ -0,0 +1,36 @@
#!/bin/bash
# 脚本名称: git_history_exporter.sh
# 功能: 提取所有分支的提交记录,按时间排序,并输出到文件。
# 输出文件名
OUTPUT_FILE="git_commit_history_with_branches.txt"
echo "======================================================="
echo " 💻 Git 提交历史导出脚本 (含分支信息) 📜"
echo "======================================================="
# **新格式定义:**
# %ad: 日期 | %h: 哈希 | %d: **引用/分支名称** | %an: 作者 | %s: 主题 | %n%b: 换行和正文
COMMIT_FORMAT="%ad | %h %d | %an | %s%n%b"
echo "正在从所有分支提取提交记录,并按时间排序..."
# 运行 git log并将结果直接写入文件
# --all 确保查看所有分支
# --decorate=short 确保 %d 输出的引用信息简短
# --reverse 按时间从早到晚排序
git log --all --reverse --decorate=short \
--date=format:'%Y-%m-%d %H:%M:%S' \
--pretty=format:"$COMMIT_FORMAT" \
> "$OUTPUT_FILE"
# 在 MINGW64 环境下,添加换行符兼容性修复
echo "正在确保文件换行符兼容 Windows (CRLF)..."
# 使用 sed 确保文本文件在 Windows 记事本中正常显示
sed -i 's/\r$//' "$OUTPUT_FILE"
sed -i 's/$/\r/' "$OUTPUT_FILE"
echo "✅ 提交记录已成功导出到文件:"
echo " $OUTPUT_FILE"
echo "======================================================="

View File

@@ -1,40 +0,0 @@
#!/bin/bash
# 存储各分支的总变化行数(新增+删除)
declare -A branch_total
# 遍历所有本地分支(排除 HEAD 指针)
for branch in $(git branch | grep -v "HEAD" | sed 's/^\* //'); do
echo "============================================="
echo "正在统计分支:$branch"
echo "============================================="
# 初始化当前分支的总行数
branch_total[$branch]=0
# 遍历当前分支的所有提交(按时间从早到晚)
git log "$branch" --reverse --pretty=format:"%h %ad %an" --date=short | while read commit date author; do
# 统计当前提交的新增+删除行数(无变化时输出 0
lines=$(git diff --shortstat "$commit^..$commit" | awk '{print $4+$6}' | head -n1)
lines=${lines:-0} # 处理空值(首次提交无父提交时)
# 累加当前分支的总行数
branch_total[$branch]=$((branch_total[$branch] + lines))
# 输出当前提交的详情(日期 提交人 提交哈希 本次变化行数)
echo -e "$date\t$author\t$commit\t$lines"
done
# 输出当前分支的总变化行数
echo -e "分支 $branch 总变化行数:${branch_total[$branch]}\n"
done
# 输出所有分支的汇总排名(按总变化行数降序)
echo "============================================="
echo "所有分支总变化行数汇总(降序)"
echo "============================================="
for branch in $(printf "%s\n" "${!branch_total[@]}" | sort -nr -k1,1 --compress-program=gzip < <(for b in "${!branch_total[@]}"; do echo "${branch_total[$b]} $b"; done)); do
total=$(echo "$branch" | awk '{print $1}')
branch_name=$(echo "$branch" | awk '{print $2}')
echo "$branch_name: $total"
done