有没有办法让`git add --patch`响应单个`y`或'n`击键?

时间:2015-09-13 04:39:43

标签: git

git add --patch是我的Git工作流程中不可或缺的一部分。唯一让我烦恼的是经常不得不在每个yn后按Enter键。有没有办法让Git只用一次yn次按键接受问题的答案?

2 个答案:

答案 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 b2627cccommit 12acdf5commit e118f06commit 04f816bcommit a5e46e6commit 9ea416ccommit 94ac3c3,{{3} },commit 08b1ea4commit 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文件中。