如果我运行git diff
,并且我的更改少于一页,该命令将自动退出。这是不受欢迎的,因为这是在脚本中,然后我立即调用git commit
。这会导致错过单页更改日志。
我的第一个想法是将差异传递到less
,但这会导致差异更改日志显示空屏幕(需要q
按下才能退出)。这是我正在使用的命令:git diff --color=always | less
。
有没有更好的方法呢?
答案 0 :(得分:5)
这是一个bash脚本来完成这项工作:
html,
body {
min-height: 100% !important;
height: 100%;
}
.container {
width: 100%;
min-height: 100%;
height: 100%;
}
.images {
width: 100%;
min-height: 100% !important;
height: 100%;
}
#content {
min-height: 100% !important;
height: 100%;
/*Change this to change width*/
width: 70%;
resize: horizontal;
float: right;
position: relative;
background: white;
}
div {
border: 1px solid black;
}
span {
border: 1px solid black;
border-radius: 50%;
position: absolute;
top: calc(50% - 20px);
left: -10px;
cursor: pointer;
height: 40px;
width: 40px;
display: inline-block;
background: white;
}
或者,这里有一个最初基于@Phillip's comment的单行,有一些修复感谢@tripleee:
#!/bin/bash
num_lines=$(git diff | wc -l)
if [ $num_lines -eq 0 ]
then
echo "No changes"
else
git diff --color=always | less --raw-control-chars
fi
单线程的优点是只运行git diff --color=always | (IFS=$'\n' read -r A; if [ -n "$A" ]; then (printf '%s\n' "$A"; cat) | less --raw-control-chars; else echo "No changes"; fi)
一次以获得更好的性能。
每@tripleee's comment的一些解释:
你应该正确使用
git diff
来无意地破坏第一行。这仍然会破坏前导空格或尾随空格。您可以在read -r
之前使用IFS=$'\n'
进行修复。如果第一行以短划线开头(read -r
类似于选项参数),echo
可能会抛出错误或行为异常 - 请使用echo
来避免这种情况。
在这两种情况下,传递给printf '%s\n' "$A"
的{{1}}选项(简短版--raw-control-chars
)都会使颜色正确显示。
答案 1 :(得分:2)
您看到less
使用-F
选项git
调用less
。通常,LESS
使用存储在环境变量git
中的任何选项。如果未设置该变量,FRX
会在运行less
之前自动将其设置为LESS
。 (也就是说,没有git
的值,less -FRX
实际上正在运行.gitconfig
。)
覆盖此方法的一种方法是将以下内容添加到[core]
pager = less -+F
文件中:
LESS
如果未设置less
,则前面的配置会导致LESS=FRX less -+F
被调用为
-F
意味着less
选项首先通过运行less
的环境启用,然后立即从命令行禁用。
(在我对你的问题的评论中,我表示LESS=X
不应该提前退出。我观察到因为我实际上在我的环境中有-F
,所以我没有{{1}自动添加。)
答案 2 :(得分:1)
如果less
是您的寻呼机,则可以通过
export LESS=-E
这将覆盖任何先前的值。为避免这种情况,而是将-E
添加到其他选项的前面,请使用
LESS=-E"${LESS#-}"
仅针对git
影响它,可能类似于
alias git='LESS=-E"${LESS#-}" git'
(这是sh
语法,即应该适合Bash,ksh
,zsh
等。)
对于其他寻呼机,类似的方法应该有效。您只需找到影响此行为的选项。