git add --patch
是我的Git工作流程中不可或缺的一部分。唯一让我烦恼的是经常不得不在每个y
或n
后按Enter键。有没有办法让Git只用一次y
或n
次按键接受问题的答案?
答案 0 :(得分:19)
这将是Git配置选项interactive.singleKey
。
interactive.singleKey
在交互式命令中,允许用户访问 使用单个键提供单字母输入(即,没有击中 输入)。目前,
--patch
git-add(1)
模式使用此模式,git-checkout(1)
,git-commit(1)
,git-reset(1)
和git-stash(1)
。注意
如果便携式按键输入是静默忽略此设置 无法使用;需要Perl模块Term::ReadKey
。
即,在您的.gitconfig
或同等文件中,添加:
[interactive]
singleKey = true
如果您希望git config [--global] interactive.singleKey yes
优于yes
并且命令优于编辑,则运行true
。
答案 1 :(得分:0)
我必须运行
sudo cpan Term::ReadKey
才能获得所需的Perl模块
自git-add--interactive.perl
is being ported in C起,下一个Git 2.26(2020年第一季度)不适用,并且涉及interactive.singlekey
。
请参见commit b2627cc,commit 12acdf5,commit e118f06,commit 04f816b,commit a5e46e6,commit 9ea416c,commit 94ac3c3,{{3} },commit 08b1ea4,commit 180f48d(2020年1月14日)由commit 1e4ffc7。
(由Johannes Schindelin (dscho
)在Junio C Hamano -- gitster
--中合并,2020年2月5日)
commit 76c57fe:更有效地处理转义序列
签名人:Johannes Schindelin
在
interactive.singlekey = true
时,我们会立即对击键做出反应,甚至对转义序列也是如此(例如,按光标键时)。转义序列的问题在于我们并不真正知道它们何时完成,并且作为一种启发式方法,我们轮询标准输入半秒以确保获得所有信息。
虽然等待半秒并不需要很多,但是随着时间的流逝它会变得很烦人,因此,使用此补丁程序,我们读取了终端功能(如果可用)并从那里提取已知的转义序列,然后立即停止轮询当我们检测到用户按下了生成已知序列的键时。
这概括了
built-in add -p
的其余部分(“add -i
:忽略终端转义序列”,2011-05-17,Git v1.7.6-rc0-b5cc003253c8)。 / p>注意:我们不会不直接查询终端功能。要么需要大量特定于平台的代码,要么需要链接到诸如
ncurses
之类的库。我们非常努力地避免链接到内置库中(我们甚至将
libcurl
依赖项踢到了非内置远程帮助程序中,只是为了消除是Git启动时间的第二秒)。特定于平台的代码将成为维护的噩梦。更糟的是:在Windows的Git中,我们将需要查询
git.exe
根本无法做到的MSYS2伪终端(因为它是有意不是一个MSYS2程序)。 / p>要解决此问题,我们只需生成
infocmp -L -1
并解析其输出(即使在面向最终用户的安装中也包含该帮助程序,该输出在Git for Windows中也可以使用)。与Perl版本一样,此操作仅执行一次,但是仅在遇到第一个转义序列时才执行,而不是在
git add -i
启动时执行;这样可以节省启动时间,但对第一个Escape序列的反应会稍慢一些。
但这使我们可以将与终端相关的代码封装在merge文件中。