3

我一直在尝试创建一个自动更新的git log --graph --no-pager. 我在使用方面取得了一些进步,fswatch但我遇到了我的 git 历史实际上比我的屏幕可以显示的更大的问题。我尝试添加| head -n $((`tput lines` - 1)),但由于换行,输出仍然溢出。然后我尝试使用tput rmam以禁用换行,但现在我通常看不到HEAD指向的位置。

任何人都可以帮助我吗?理想情况下,我想删除--no-pager,但我不知道如何使它与fswatch. 这是我到目前为止所拥有的:

function gwatch() {
  tput rmam
  location=$(git rev-parse --show-toplevel)
  clear;
  git --no-pager graph --color | head -n $((`tput lines` - 1));
  tput smam

  fswatch -or $location/.git | while read MODFILE
  do
    tput rmam
    clear;
    git --no-pager graph --color | head -n $((`tput lines` - 1));
    tput smam
  done
}
4

1 回答 1

3

我有一个没有你那么优雅但简单的解决方案:使用watch

watch -n 1  "sh -c 'git log | head -n $(tput lines)'"

watch将为您进行分页,但您将无法浏览日志。

但是,如果您愿意,可以使用以下代码:

#!/bin/bash

gitwatch()
{
    while true; do
        sleep 3
        fswatch -xr $location/.git/objects | while read events; do
            if echo $events | grep -q Created; then
                pid=$(pgrep -t $(ps -o tty= -p $$) $PAGER)
                kill $pid
                break
            fi
        done
    done
}

location=$(git rev-parse --show-toplevel)

gitwatch &

while true; do
    git log
done

了,因为我们在git的一次修改中创建了多个文件。这段代码需要一个更好的解决方案来捕捉 git 中的修改,不是查看所有 git 对象!

-x可以grep使用. _ -o --event=Created_ 但是,这种方法响应速度较慢,并且似乎并非一直有效。

于 2018-01-25T10:19:31.667 回答