我正在开发一个相当大的git repo,有几千个(远程)分支.我习惯在控制台中使用自动完成(使用[TAB])(在这种情况下使用Git Bash),所以我也无意识地为git命令执行此操作.
比如我打字
git checkout task[TAB]
Run Code Online (Sandbox Code Playgroud)
因为控制台经常停顿几分钟.有没有办法只限制自动完成到本地分支?
eri*_*ers 26
我假设你正在使用git-completion.bash脚本,而你只关心它git checkout.
为了实现这一点,我只更改了_git_checkout ()函数定义中的一行git-completion.bash:
< __gitcomp_nl "$(__git_refs '' $track)"
---
> __gitcomp_nl "$(__git_heads '' $track)"
Run Code Online (Sandbox Code Playgroud)
我的理解是,这只会影响制表符完成操作(因为它在*switch-case语句的位置内).
Von*_*onC 20
使用Git 2.13(2017年第二季度),您可以禁用(部分)分支完成.
git checkout --no-guess ...
# or:
export GIT_COMPLETION_CHECKOUT_NO_GUESS=1
Run Code Online (Sandbox Code Playgroud)
请参阅Jeff King()提交的60e71bb(2017年4月21日).(由Junio C Hamano合并- -在提交b439747,2017年5月1日)peff
gitster
如contrib/completion/git-completion.bash现在所述:
您可以设置以下环境变量以影响完成例程的行为:
Run Code Online (Sandbox Code Playgroud)GIT_COMPLETION_CHECKOUT_NO_GUESS设置为"1"时,不要在
git-checkout完成时包含"DWIM"建议(例如,当"origin/foo"存在时完成"foo").
注意:DWIM是D o W hat I M ean的缩写,系统试图预测用户打算做什么,自动纠正琐碎错误,而不是盲目地执行用户明确但可能不正确的输入.
completion:可选择禁用结帐DWIM当我们完成"
git checkout"的分支名称时,我们还会完成可能触发DWIM行为的远程分支名称.根据您的工作流程和项目,这可能既方便又烦人.例如,我的克隆
gitster.git包含74个本地"jk/*"分支,但原点包含另一个147.
当我想签出本地分支但不能完全记住名称时,选项卡完成显示251个条目.更糟糕的是,对于已经为pu获取的主题,上游分支名称可能与我的相似,导致我选择错误的并且意外地创建新分支的概率很高.
注意:"拾起pu":看看是什么烹饪git.git:它开始于:
前缀为'
-'的提交仅在'pu'(建议的更新)中,而以'+'为前缀的提交在'next'中.
这是Git Workflow Graduation流程的一部分.
pu(建议更新)是一个集成分支,用于尚未准备好包含的内容
此修补程序为用户添加了一种方法,可以告知完成代码不包含用于结帐的DWIM建议.
这可以通过输入以下内容来完成:Run Code Online (Sandbox Code Playgroud)git checkout --no-guess jk/<TAB>但那很麻烦.
不利的一面,当然,是你不再得到完成支持,当你不想要调用DWIM行为.
但是根据你的工作流程,这可能不是一个很大的损失(例如,在git.git我更可能想要分离,所以我打算"git checkout origin/jk/<TAB>"无论如何).
seh*_*ehe 10
你可以破解/etc/bash_completion.d/git
你需要编辑 __git_refs ()
请注意,行为的更改将适用于所有位置(即使使用git push/pull,您也可能不希望这样做).当然,您可以复制该函数或传递一个额外的参数,但我会留给您
如果您通过自制程序安装了git-completion,它位于:
/usr/local/etc/bash_completion.d/git-completion.bash
按照上面的erik.weathers的回答,我做了以下更改,因此自动完成功能可以根据当前前缀为本地和远程工作.默认情况下,它只会搜索本地,但如果我指定origin/…它,我知道我也想搜索远程分支.
在_git_checkout ()方法中,改变
__gitcomp_nl "$(__git_refs '' $track)"
Run Code Online (Sandbox Code Playgroud)
至:
# only search local branches instead of remote branches if origin isn't specified
if [[ $cur == "origin/"* ]]; then
__gitcomp_nl "$(__git_refs '' $track)"
else
__gitcomp_nl "$(__git_heads '' $track)"
fi
Run Code Online (Sandbox Code Playgroud)
当然,您可以更改origin为其他内容,或者如果您有多个远程前缀,则可以通过远程前缀列表进行搜索.
| 归档时间: |
|
| 查看次数: |
4751 次 |
| 最近记录: |