自制软件的git不使用补全


144

当使用OSX的git时,我修改文件后就可以git commit <tab>轻松完成操作,这会将文件名自动完成为修改后的文件名。但是,如果我从自制软件安装了较新版本的git并使用了该功能,则该功能将不再起作用(这意味着我按<tab>,它只是“询问”我要执行的文件,甚至包括没有更改的文件) )。

谁能阐明为什么以及如何解决这个问题?我更喜欢使用自制的git,因为它是最新的。

我的外壳是zsh,并且既未安装bash-completion也未zsh-completions工作(即使遵循homebrew的安装后说明)。

另外,用自制软件安装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

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


什么版本zshgit您使用的?
simont

最新的自制软件。zsh 5.0.2和git
1.8.1.3

其他git补全是否起作用(例如git co<TAB>= => git commit)?
simont

2
我怀疑这里会遇到一些其他问题,但是通过brew安装git可以解决此问题。似乎zsh-completions对Mac git并不满意,尽管它以前运行良好(可能盲目更新到0.17.x)。
2013年

Answers:


287

您正在寻找:

brew install git bash-completion

正如warpc的评论所指出的那样,您需要在自己的代码中添加以下内容,~/.bash_profile以使自制软件的bash 补全功能正常工作:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

在安装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"

对于git,docker,youtube-dl和其他可能包含在$(brew --prefix)/etc/bash_completion.d/目录中的补全,额外的导出是必需的。


3
我的外壳是zsh。这是否意味着我应该做brew install git zsh-completions?另外,在用homebrew安装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,所以我不能使用其中之一吗?
user137369

2
既未安装bash-completion也未zsh-completions工作(即使在安装后遵循了自制程序的说明之后)。
user137369

12
您是否还在bash情况下在〜/ .bash_profile中添加了以下内容:if [-f $(brew --prefix)/ etc / bash_completion]; 然后 。$(brew --prefix)/ etc / bash_completion fi
warpc

5
我已经安装了git而没有brew。现在,我想使用brew安装bash_completion。我运行brew install bash-completion并添加了上面的代码,但是没有运气
MagePsycho 2014年

3
值得注意的是,通过brew安装git对于这项工作至关重要。我不知道苹果版本的git是问题的一部分。在我知道之前我否决了这个答案,现在我不能
赞成

109

这可以在OSX上完成git标签的完成,而无需重新启动终端:

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

14
使用时将其称为“单线”有点欺骗&&。任何bash脚本都可以是这样的单行代码。
user137369

1
您才是真正的MVP!
heez

2
绝对比brew install方法更好。仅仅因为它有效。
dchayka

2
一直在寻找关于为什么bash无法选择git-completion命令的解决方案的时间。终于,这奏效了!非常感谢!
TheAmazingKnight,

1
这是实际的解决方案,更简单
Rigin Oommen,

22

万一其他人犯了我愚蠢的错误,请尝试brew install git。我使用的git是Xcode附带的,但没有意识到我从未安装过Homebrew的git来获取自动完成功能。


19

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

在我的情况下,最终的解决方法是:

brew unlink bash-completion
brew link bash-completion

在遵循@Graham Pixel的回答后,这终于使我大吃一惊。
路加福音

这对我来说也适用于OS X Sierra 10.12.6上的Homebrew 1.6.0,git 2.17.0(hub 2.2.9)和bash-completion 1.3。
jared'Apr

10

我通过找出执行后$(brew --prefix)/etc/bash_completion返回的值来解决了这个问题Permission denied。所以经过一个简单的:

chmod +x $(brew --prefix)/etc/bash_completion

现在一切正常。我想知道为什么Homebrew bash_completion在安装时不使文件可执行。


5
不,这是错误的。 bash_completion的意思是将source其定义在您的外壳中;执行将无效。
toddkaufmann

5

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

brew install git --without-completions

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


3
我看不到git没有完成安装会如何改善无法完成的情况。我认为Graham Perks的答案stackoverflow.com/a/14970926/1199564应该标记为正确的答案。
mgd 2013年

我遇到了类似的问题,并且我解决了重新安装文件并从中git --without-completions获取bash-completion.bash文件的问题.bash_profile,很可能按照标准过程将其覆盖了。
莱昂纳多·

1
这不是正确答案。@graham perks的答案是正确的。
CantGetANick

@CantGetANick Graham的答案不能解决我的问题,可以解决,这就是我标记它的原因。
user137369 2013年

1
100%同意user137369:我已经安装了自制软件的bash-completion软件包,因此@graham的答案对我来说可能不起作用。但是,brew install git修复了所有问题(不需要--without-complete)。我认为这也是正确的答案。
bronson

5

我遇到了同样的问题,今天早上甚至发现了这篇文章。我通过更新brew与brew update然后重新安装git来解决此问题brew reinstall git

然后,我收到另一个文件,该文件阻止了自制程序链接过程,在我的情况下为/usr/local/share/zsh/site-functions/git-completion.bash。删除文件并运行即可brew link git解决该问题。猜测这只是我们偶然发现的一个糟糕的食谱版本。


1
您还会注意到正在使用的git版本是Apple的版本,而不是Homebrew安装的版本。至少就我而言。您可以通过git --version
Jonathan Knapp

不。这仍然对我不起作用。我总是回到使用OSX的git的角度来看,完成功能实在太大了,无法放手。
user137369 2013年

更新到Mavericks后,git-completion停止为我工作。我必须brew reinstall git并且也要brew reinstall bash-completion使其再次起作用。
克雷西米尔Nesek

3

如果您的$BASH_VERSION<4.1,例如,3.2.57(1)-release请继续:

brew install bash-completion
# In ~/.bash_profile :
if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

但是,如果您brew install bash需要获取版本4.4.12(1)-release ,则可以在以下方面使用更好,更完整的补全:

brew install bash-completion@2
# In ~/.bash_profile:
[ -f "$(brew --prefix)/share/bash-completion/bash_completion" ] \
&& . "$(brew --prefix)/share/bash-completion/bash_completion"

请注意,某些软件包(brew,docker,tmux)仍将包含一些$(brew --prefix)/etc/bash_completion.d/补全,因此您可以添加:

for completion in "$(brew --prefix)/etc/bash_completion.d/"*
do
    . $completion
done

最后,如果由于某些原因,安装git的方式未将git完成脚本添加到以下两个脚本中,则您应该能够添加该脚本:

[[ -f $(brew --prefix)/etc/bash_completion.d/git \
|| -f $(brew --prefix)/share/bash-completion/completions/git ]] \
|| curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash \
    -o $(brew --prefix)/etc/bash_completion.d/git

您可以通过上面的方法获取并添加它。



1

对我来说,我不得不

source $(brew --prefix)/etc/bash_completion

进入.bashrc(而不是.bash_profile)以使其正常工作。

“ .bash_profile是针对登录shell执行的,而.bashrc是针对交互式非登录shell执行的”。-from .bash_profile和.bashrc有什么区别?在我看来.bash_profile,只有打开新的终端窗口时,MacOS Sierra才执行.bashrc

我不会将其放在_bash_profile中,因为那样的话,我必须重新启动/注销才能使更新生效。


1

这在Mojave(OSX 10.14.1)中为我工作:

brew install bash-completion

然后将以下行添加到您的〜/ .bash_profile中:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion

它只是乘以警告的数量
侯赛因·阿克拉姆

1

在2019年,使用Bash v5,您不需要在您的.bash_profile或中显式提供git bash完成脚本.bashrc

  1. 确保您的以下两行 .bashrc
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"
  1. 下载git bash完成脚本(https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash)并将其另存/usr/local/etc/bash_completion.d/git

而已!Bash将自动拾取git完成文件并启用完成功能。


旁注:我建议将所有这些更改放入其中,.bashrc因为这样可以确保当您放入交互式外壳程序(即from pipenv shell)时,补全将正确加载,因为bash将作为source .bashrc而不是NOT .bash_profile


0

它可能与在Lion中使用libedit而不是readline有关。

尝试在git之前安装readline。

brew install readline

0

对于已经安装了brew bash-completion的用户。我没有安装git完成脚本,因此找不到任何点击。

所以我手动添加了它:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o $(brew --prefix)/etc/bash_completion.d/git

请注意,您必须重命名文件并删除扩展名才能使用。

如果尚未安装完成或git,则将其安装在接受的答案中。

brew install git bash-completion


0

如果您使用自制软件安装git,则可能不需要安装任何东西来支持git完成。“ git-completion.bash”文件在某处(我的位置在:/usr/local/git/contrib/completion/git-completion.bash)

您需要做的就是查找文件:sudo find / -type f -name“ git-completion.bash”

然后在.bash_profile中找到其路径。例如,我需要将此行添加到我的〜/ .bash_profile中:

source /usr/local/git/contrib/completion/git-completion.bash

不要忘记来源〜/ .bash_profile或重新打开终端;)

来自: 如何启用git-tab-completion-bash-mac-os-x


@ user137369它确实可以-因为这里您不需要安装已经安装的东西...
Dozon Higgs

0

我知道这是一篇旧文章,但是您实际上不需要安装任何其他软件包。

Homebrew会通知您一个目录,其中包含您需要的所有内容。

.bash_profile如果您使用的是Bash,则只需在您的行中添加以下行:

source /usr/local/etc/bash_completion.d/git-completion.bash

-1

在MAC-OS Mojave 10.14上启用GIT命令的自动完成功能我是开发人员,一直在命令行中使用GIT。当我考虑开发角度时,我曾经使用用于GIT操作的命令行执行许多命令。大多数时候,令人讨厌的是,MAC OS不自动支持我部分支持的命令完成功能。以及命令建议,这意味着可用于键入字符的命令是什么。因此,键入非常长的命令以及大多数重复性的任务会导致错字,这很麻烦。:(

制表符补全肯定会更快,更轻松。不幸的是,某些Mac计算机上的git默认安装没有启用制表符完成功能。

因此,我正在寻找问题的解决方法,并且从网络搜索中找到了几种解决方案,例如StackOverflow,GitHub和媒介。不幸的是,这些解决方案对我不起作用,因此尝试多次不同的解决方案而感到沮丧。

我正在深入研究并尝试不同的解决方案,所幸的是,这很容易解决。以下是我从几篇文章中收集的步骤,终于按预期工作了。因此,我希望与像我这样的其他人分享。

如果您去网络搜索,您会发现许多解决方案,其中提到了gitcomplete bash文件。甚至GitHub指南。但是我建议您先检查git-completion.bash文件是否已经在您的MAC计算机中带有git-core或其他来自安装的文件。您可以使用以下命令。

sudo find / -type f -name "git-completion.bash"

您将获得以下结果。(根据内容可能有所不同)

/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
/Users/Dilanka/git-completion.bash
/Users/Dilanka/.oh-my-zsh/plugins/gitfast/git-completion.bash
/Users/Dilanka/Downloads/git-completion.bash

我建议您选择从git-core安装的

如果您的计算机上不存在git-completion.bash脚本,请从上面提供的以下内容中检索它,并将其保存到本地计算机上的/ usr / local / etc /中名为git-completion.bash的新文件中。 bash_completion.d /目录。

https://git-scm.com/book/zh/v1/Git-Basics-Tips-and-Tricks

如果使用Bash shell,Git会提供一个不错的自动完成脚本,您可以启用它。直接从Git源代码下载它,网址为

https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

如果您的计算机上存在git-completion.bash脚本,但不在/usr/local/etc/bash_completion.d/目录中,则应创建该目录并将文件复制到其中。下面的命令将完成这项工作:

sudo mkdir /opt/local/etc/bash_completion.d
sudo cp /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash

完成以上之后。git-completion.bash脚本应该在本地计算机上的/usr/local/etc/bash_completion.d/目录中。

现在,您需要使用以下命令刷新您的个人资料。它将把您添加的bash文件加载到终端上下文中。

source ~/.bash_profile

大!!!你已经做到了。只需启动终端窗口并尝试即可。只需输入“ git sta”,它将显示如下建议:

git sta
stage    stash    status
git chec<TAB> will show git checkout

在这里查看我的GitHub帖子:

https://github.com/DIL8654/Enable-Auto-Completion-of-GIT-commads-on-MAC-OS-Mojave

在这里查看我的中号帖子:

https://medium.com/@dilanka85/enable-auto-completion-of-git-commands-on-mac-os-mojave-10-14

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.