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

如何为dokku/heroku的git push输出添加相对时间戳?

解决git push输出与ts命令时间戳混乱的问题

问题根源在于git push的输出并非标准行缓冲模式:推送过程中,git会输出进度提示(如文件上传进度)这类逐字符、不换行的内容,而ts -s默认会给每个输出片段都添加时间戳,导致时间戳混乱叠加。以下是几种可行的解决方法:

方法1:用unbuffer强制git输出为行缓冲

unbuffer工具会模拟交互式终端环境,让git以行缓冲模式输出内容,确保ts能正确为每一行添加时间戳:

unbuffer git push dokku main 2>&1 | ts -s

如果系统没有unbuffer,需要先安装expect工具包:

  • Debian/Ubuntu:sudo apt install expect
  • RHEL/CentOS:sudo dnf install expect

方法2:用script捕获终端输出

script命令同样会模拟终端,完整捕获git的输出(包括正确的行分隔),再传递给ts处理:

script -q /dev/null git push dokku main 2>&1 | ts -s

-q参数用于静默模式,避免输出script自身的启动/结束提示;/dev/null指定不保存终端会话到文件,只把git的输出送到管道。

方法3:用awk自定义时间戳(无需额外工具)

如果不想安装第三方工具,可以用awk直接处理,记录命令启动时间并计算相对时间:

git push dokku main 2>&1 | awk 'BEGIN { start = systime() } { printf "[%ds] %s\n", systime() - start, $0; fflush() }'
  • systime()是awk内置函数,返回当前Unix时间戳(秒)
  • fflush()强制刷新输出,避免缓冲导致时间戳显示延迟
  • 如果需要更精确的毫秒级时间戳,可以用:
git push dokku main 2>&1 | awk 'BEGIN { getline t < "/proc/uptime"; split(t, a); start = a[1] } { getline t < "/proc/uptime"; split(t, a); printf "[%.2fs] %s\n", a[1] - start, $0; fflush() }'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:32:14