11.26
This commit is contained in:
36
材料/code/统计git提交-gitbsah使用.sh
Normal file
36
材料/code/统计git提交-gitbsah使用.sh
Normal 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 "======================================================="
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user