gpt4 book ai didi

git - 分支自动完成不适用于推送的 git 别名

转载 作者:太空狗 更新时间:2023-10-29 13:20:13 25 4
gpt4 key购买 nike

我正在使用 Git 和 git-completion一切正常,只有一个异常(exception):当我这样做时

git p some_remote [TAB]

我得到当前目录中文件的自动完成建议(错误)。 p 是一个 Git 别名:

$ cat ~/.gitconfig
[alias]
p = push

仍然,当我这样做时:

git push some_remote [TAB]

我得到当前存储库中分支的建议(正确)。在这两种情况下,some_remote 的完成都能正常工作。

这是什么原因?

最佳答案

这是一个错误!

git-completion.bash 可以 go through your git aliases ,将每个连接到正确的完成功能。

但是其中四个——git pushfetchpullremote 的函数——委托(delegate)给 __git_complete_remote_or_refspec()starts like this :

__git_complete_remote_or_refspec ()
{
local cur_="$cur" cmd="${words[1]}"
...

$words 只是来自命令行的标记列表,几行之后,它开始检查 $cmd 而不扩展别名,for example :

case "$cmd" in
fetch)
# ...
pull|remote)
# ...


据我所知,Gábor Szeder first reported this two years ago在关于使用 shell 别名完成工作的线程中。

2012年他又提到了in reply to a patch来自 Felipe Contreras (@felipec)。上个月,费利佩announced他的 fork of git ,它实际上有一个独立的补丁:b7b6be72 .

我不知道上游是否已提交,但与此同时...如果您想对其进行测试,请将补丁应用到您的 git-completion.bash:

curl https://github.com/felipec/git/commit/b7b6be72d60d.diff |
patch -d [directory containing git-completion.bash]
# useful options for patch: --verbose --dry-run

如果您不知道当前的 git-completion.bash 在哪里,请尝试 declare -F:

dirname "$(shopt -s extdebug; declare -F __git_complete | awk '{ print $3 }')"

(修补 git-completion.bash 后,它会提示您输入 git-completion.zsh 的位置以应用第二个 hunk...您可以只需点击 ^C 即可跳过它。)

关于git - 分支自动完成不适用于推送的 git 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20217216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com