【问题标题】:Can I disable a particular git command?我可以禁用特定的 git 命令吗?
【发布时间】:2018-06-12 10:07:40
【问题描述】:

随着新版本的 git 的添加,我可能永远不会使用新的命令。
有没有办法可以禁用这些命令,以便我的选项卡完成更快?
例如:之前,git check<tab> 会自动补全为git checkout
但是现在 git check<tab> 没有完成标签,因为在较新的 git 版本中有 git check-mailmap

这只是一个例子。

或者,如果我可以“强制” git 以制表符完成“检查”到 checkout,那就太好了。

编辑:我使用 vanilla bash 没有额外的修改

【问题讨论】:

  • 你使用香草bash 吗?你有zsh 或任何补全插件吗?
  • 你真正需要的可能是修改指定的自动完成文件。
  • @Aserre 我使用香草 ubuntu bash。我会将其添加到问题中以进行澄清。
  • 您应该考虑使用较新的git switch <branch> 而不是结帐来进行分支之间的导航。如果您不小心输入了git checkout <filename>,您将撤消对文件的所有更改。是git switch -c <branch>创建一个新分支并切换到它。

标签: bash git tab-completion bash-completion


【解决方案1】:

官方的做法是使用completion.commands的配置,去掉不想要的:

git config --global completion.commands -check-mailmap

但是,您还可以做得更多。 __git_main() 中有一个 hack 用于测试,你可以滥用它来做你想做的事:

GIT_TESTING_PORCELAIN_COMMAND_LIST="$(git --list-cmds=list-mainporcelain,alias)"

这将强制 Git 的完成只显示主要命令(和别名)。

您需要 Git v2.18 或更新版本才能使这些工作。

【讨论】:

  • 哇,这比从 git-completion.bash 中删除内容要干净得多。我不知道这存在。
  • 无法让它在 zsh 上运行……我注定要失败吗?无法搜索,所有结果都是通用的自动完成设置指南。
  • @gibatronic Zsh 的完成是没有希望的。您可以使用我自己的 Zsh 完成,它使用 Git 的官方完成:github.com/felipec/git-completion
【解决方案2】:

要了解如何从自动完成中删除项目,请参阅 FelipeC 的回答。

另一种方法是使用 git 别名来为您常用的命令创建更短的替代方案。例如:

git config --global alias.co checkout

现在您可以输入git co 来签出文件。

【讨论】:

  • 我不知道我们可以设置别名!这比我最初想要的要好得多。谢谢!
  • _git_foo() 函数只有在用户输入 'git foo ` 之后才会被调用。
  • @FelipeC 随意发布关于如何从 Git 的自动完成中删除命令的更好答案。这将对每个人都有帮助。
  • @RyanLundy 我就是这么写的。
猜你喜欢
  • 2014-05-21
  • 2014-04-09
  • 2020-12-09
  • 1970-01-01
  • 2020-11-12
  • 2021-07-02
  • 1970-01-01
  • 2020-03-10
  • 2020-11-28
相关资源
最近更新 更多