Homebrew的`git`没有使用完成

use*_*369 139 git macos zsh autocomplete

当我使用OSX的git时,我可以简单地修改一个文件git commit <tab>,然后自动完成文件的名称到被修改的文件.但是,如果我从自制软件安装更新版本的git并且我使用它,那么这个功能就不再适用了(这意味着我按下<tab>它只是"询问"我想要做什么文件,甚至包括那些没有变化的文件).

任何人都可以解释为什么,以及如何解决这个问题?我更喜欢使用自制软件的git,因为它更新了.

我的shell是zsh,无论是安装bash-completion还是zsh-completions工作(甚至在遵循自制软件的安装后说明之后).

此外,在用自制软件安装git后,它说

Bash completion has been installed to: /usr/local/etc/bash_completion.d
zsh completion has been installed to: /usr/local/share/zsh/site-functions
Run Code Online (Sandbox Code Playgroud)

所以我不应该使用其中之一吗?

Gra*_*rks 274

您正在寻找:

brew install git bash-completion
Run Code Online (Sandbox Code Playgroud)

正如warpc的评论所述,您需要将以下内容添加到您的主页~/.bash_profile以完成自制软件的bash-completion工作:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi
Run Code Online (Sandbox Code Playgroud)

安装bash-completion公式时,需要注意上述内容.


注意:如果您正在使用Bash v4或更高版本(通过brew install bash),那么您将要使用brew install bash-completion@2,以启用选项卡完成添加以下内容,~/.bash_profile如警告中所述:

export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
Run Code Online (Sandbox Code Playgroud)

git,docker,youtube-dl和其他可能包含在$(brew --prefix)/etc/bash_completion.d/目录中的完成需要额外的导出.

  • 你是否也为bash案例添加了〜/ .bash_profile这个内容:if [-f $(brew --prefix)/ etc/bash_completion]; 然后 .$(brew --prefix)/ etc/bash_completion fi (12认同)
  • 我已经安装了没有brew的git.现在我想使用brew安装bash_completion.我运行brew install bash-completion并添加了上面的代码,但没有运气 (4认同)
  • 值得注意的是,通过brew 安装git 对于此工作至关重要。我不知道苹果版本的 git 是问题的一部分。在我知道之前我就否决了这个答案,现在我不能投票:( (3认同)
  • 我的shell是zsh.这是否意味着我应该做'brew install git zsh-completions`?另外,在用自制软件安装git之后,它说'Bash完成已经安装到:/usr/local/etc/bash_completion.d.ssh completion已经安装到:/ usr/local/share/zsh/site-functions`,所以不能我用的是其中之一吗? (2认同)
  • 安装`bash-completion`或`zsh-completions`均无效(即使在安装后遵循了Homebrew的说明)。 (2认同)
  • 对于Apple Silicon Mac,路径应该全部是“/opt/homebrew”而不是“/usr/local”,或者更好的是使用“brew shellenv”添加的“$HOMEBREW_PREFIX” (2认同)

use*_*638 98

这个得到的git tab完成在OSX上工作而不必重新启动你的终端:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash && echo "source ~/.git-completion.bash" >> ~/.bash_profile && source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

  • 使用`&&`时,将它称为单行是一种欺骗.任何bash脚本都可以像这样单行. (14认同)
  • 绝对比“ brew install”方法好。仅仅因为它有效。 (2认同)
  • 一直在寻找有关为什么bash无法选择git-completion命令的解决方案的时间。终于,这奏效了!非常感谢! (2认同)

Har*_*vey 20

如果其他人犯了我愚蠢的错误,试试吧brew install git.我正在使用gitXcode附带的,并没有意识到我从未安装过Homebrew的git来获得自动完成功能.


Ane*_*pic 19

出于某种原因,我错过了文件,$(brew --prefix)/etc/bash_completion所以@Graham Perks的正确答案对我不起作用

它最终解决了我的情况:

brew unlink bash-completion
brew link bash-completion
Run Code Online (Sandbox Code Playgroud)


Asb*_*erg 10

我通过弄清楚执行时$(brew --prefix)/etc/bash_completion返回的问题解决了这个问题Permission denied.所以简单之后:

chmod +x $(brew --prefix)/etc/bash_completion
Run Code Online (Sandbox Code Playgroud)

现在一切都很好.我想知道为什么Homebrew bash_completion在安装时不会使文件可执行.

  • 不,这是错的.`bash_completion`意思是`source`'d所以定义在你的shell中; 执行将无效. (4认同)

Pat*_*ilg 6

对于 macOS Catalina 上的 bash(3/30 更新: Big Sur 也是如此),如果您还想使用自制程序中的 Bash 5,则需要确保您的登录 shell设置为自制程序的 bash,而不是默认值。

要检查您是否需要执行此操作,请运行echo ${BASH_VERSION}. 如果您看到以 3 开头的版本,则表明您没有使用 Brew 的 bash 作为登录 shell。

为了改变这一点,

  1. 打开System Preferences-> Users and Groups.
  2. 右键单击您的用户并选择“高级选项”。您可能需要通过单击左下角的锁来使用密码解锁。
  3. 将该字段设置login shell为您的brew bash 的位置,通常可以在安装brew 的bash 后which bash通过在终端中运行来找到该位置。我的是。/usr/local/bin/bash

重新启动您的终端,然后按照这个优秀答案中的说明进行操作


小智 5

我有同样的问题,甚至今天早上发现这篇文章.我通过更新brew修复了问题brew update,然后重新安装git brew reinstall git.

然后我被告知另一个阻止自制链接进程的文件,就我的情况而言/usr/local/share/zsh/site-functions/git-completion.bash.删除文件并运行brew link git解决了问题.猜测这只是一个糟糕的食谱版本我们偶然发现.


use*_*369 5

找到了一个可行的解决方案。它是最近的(16 小时前编写,2 小时前提交),并且直接来自 homebrew

brew install git --without-completions

刚刚尝试了一下,终于按预期工作了。

  • 我不知道如何在不完成的情况下安装 `git` 可以改善完成不起作用的情况。我相信 Graham Perks 的回答 http://stackoverflow.com/a/14970926/1199564 应该被标记为正确答案。 (3认同)