如何查看git log自动刷新

如何查看git log自动刷新

我正在尝试创建一个脚本,该脚本将使我git log每 1 秒刷新一次。这是我的脚本:

while :
do
clear
git log --all --decorate --oneline --graph
sleep 1
done

它无法工作,因为git log需要等待用户点击q退出 - 因此循环卡住了。我该如何修复这个问题?

答案1

基于这个答案--no-pager从 SO 开始,您可以通过在 后立即添加来停止退出git

log等待的不是命令q,而是less执行分页的工具。通过告知git您不需要分页器,log命令将打印所有输出,然后立即退出。

当然,如果有多个屏幕,您将会打印出所有内容,并且必须向上滚动才能看到最近的提交。您可以通过添加类似 的内容来限制要记录的提交数量,从而解决这个问题-22。这将限制为 22 个提交,当然您可以选择其他数字。

就像是:

while :
do
clear
git --no-pager log --all --decorate --oneline -22 --graph
sleep 1
done

答案2

你可以用以下命令将其变成一行watch

watch --color -n 3 git log --all --decorate --oneline --graph --color=always

调整-n标志来改变刷新率。

答案3

如果您想防止屏幕因执行循环的每次迭代而闪烁,我建议将输出存储git log在文件中,并在标准输出中实际重新运行命令之前检查与前一次迭代的差异:

GIT_LOG_CMD="git --no-pager log --all --decorate --oneline -22 --graph"
PREV_OUTPUT_FILE="/tmp/git_log_output.txt"

if [ ! -f "$PREV_OUTPUT_FILE" ]; then
  touch "$PREV_OUTPUT_FILE"
fi

while :
do
  CURRENT_OUTPUT=$($GIT_LOG_CMD)

  if [ "$CURRENT_OUTPUT" != "$(cat $PREV_OUTPUT_FILE)" ]; then
    clear
    $GIT_LOG_CMD
    echo "$CURRENT_OUTPUT" > "$PREV_OUTPUT_FILE"
  fi

  sleep 1
done

相关内容