我一直在尝试创建自动更新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
}
答案 0 :(得分: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
我放了一个 sleep 因为我们在 git 中的一个修改中有多个文件创建。此代码需要一个更好的解决方案来捕获 git 中的修改,而不是观察所有git对象!
而不是-x
,而是grep
与已创建,您可以使用-o --event=Created
。但是,这种方法反应较慢,似乎不能一直工作。