You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量遍历Git仓库执行git log缺换行致行粘连如何修复

问题根因

判断准确:git log的--pretty=format:配置默认只会在多条提交记录之间插入换行符,不会在整个输出的最后一条记录末尾追加换行。当一个仓库的git log执行结束后,输出流没有终止换行,下一个仓库输出的第一条提交记录就会直接拼接在上一行末尾,最终出现行粘连的异常输出。

修复方案

优先使用git原生支持的tformat格式替换原有的format,这是最简洁、最适配管道场景的解法:
tformat全称为terminator format,和format的唯一区别就是会给每一条提交记录(包括最后一条)的末尾都追加换行符,从根源避免无换行导致的拼接问题。
修复后的完整命令如下:

for repo in */; do (cd "$repo" && git log -G request --pretty=tformat:"%ad %h in ${repo%/} by %an, %s" --date=iso --since=2022-05-01); done | sort -r

命令附带两个鲁棒性优化:

  • 将遍历目标从*改为*/,仅匹配当前目录下的子目录,避免误将普通文件识别为仓库目录触发执行错误
  • 对路径变量加引号包裹,同时用${repo%/}去掉目录遍历自动追加的末尾斜杠,兼容带空格的目录名,输出格式更整洁

如果不想修改git log的格式参数,也可以选择在每个仓库的git log执行完成后手动补打一个换行,效果等价:

for repo in */; do (cd "$repo" && git log -G request --pretty=format:"%ad %h in ${repo%/} by %an, %s" --date=iso --since=2022-05-01 && echo); done | sort -r

注意:如果子目录中存在不是Git仓库的目录,上述命令会输出cd或git的报错信息,在git log命令后追加2>/dev/null丢弃错误输出即可。

内容的提问来源于stack exchange,提问作者guettli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:21:22