如何使git-completion.bash在Mac OS X上运行?


92

我已经按照http://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live-without添加git-completion.bash到我的/opt/local/etc/bash_completion.d/git-completion

然后我PS1='\h:\W$(__git_ps1 "(%s)") \u\$ '输入了.bashrc_profile

但是现在我得到了-bash: __git_ps1: command not found我做的一切cd

你能告诉我我想念什么吗?


Answers:


65

我在新安装的Snow Leopard上使用MacPorts安装了git 。从.dmg映像安装MacPorts之后,这些将是Terminal.app中的命令:

sudo port selfupdate
sudo port install git-core +bash_completion

如果您还希望支持从SVN存储库和文档中提取信息,请使用此代码代替第二行:

sudo port install git-core +bash_completion +doc +svn

然后将以下内容添加到您的〜/ .profile或〜/ .bash_profile中:

#MacPorts Bash shell命令完成
如果[-f / opt / local / etc / bash_completion];然后
    。/ opt / local / etc / bash_completion
科幻

或适用于Mountain Lion版本2.1.2以后的MacPorts:

#MacPorts Bash shell命令完成
如果[-f /opt/local/etc/profile.d/bash_completion.sh];然后
  。/opt/local/etc/profile.d/bash_completion.sh
科幻

或使用较新版本git的MacPorts:

如果[-f /opt/local/share/git-core/git-prompt.sh]; 然后
    。/ opt /本地/共享/git-core/git-prompt.sh
科幻

注意:bash_completion.sh需要bash 4.1或更高版本。如果完成不起作用echo $BASH_VERSION,请尝试看看是否是问题所在。如果是这样,请通过键入输入MacPorts bash,bash然后再次尝试gitcomplete。


我只是复制粘贴,但仍然遇到OP错误。= \。您如何知道其中包含什么?我不知道bash_completion的来源
NullVoxPopuli 2012年

注意,对于较新版本的git / macport / bash-completion,提示位于另一个文件中。参见:trac.macports.org/ticket/36334 if [ -f /opt/local/share/git-core/git-prompt.sh ]; then . /opt/local/share/git-core/git-prompt.sh fi
Yehosef 2012年

3
因为/opt/local/etc/profile.d/bash_completion.sh需要$BASH_VERSION4.1或更高版本,所以我必须在具有MacPorts 2.1.3的Mac OS X 10.8.3上执行以下操作:将Mac OS X登录外壳从其默认/bin/bash(3.2.48(1)-发行版)切换到MacPorts /opt/local/bin/bash(4.2 .42(2)-release),如下所示:stackoverflow.com/a/791244/287984。基本上if [ `grep /opt/local/bin/bash /etc/shells` ]; then echo /opt/local/bin/bash | chsh -s /opt/local/bin/bash; else echo /opt/local/bin/bash | sudo tee -a /etc/shells; chsh -s /opt/local/bin/bash; fi
UweGünther13年

对我来说很棒。必须/bin/bash/opt/local/bin/bashMacports + .bash_profile这里建议的所有更改替换Terminal.app中的内容。
2013年

1
要移动来砸4.1或更高版本,你可以在这里按照指示:apple.stackexchange.com/questions/70132/...
ThomasW

55

如果您在使用自制软件比你可能会调整的MacPorts建议一点,它添加到安装的git你.bash_profile.bashrc

if [ -f `brew --prefix`/etc/bash_completion.d/git-completion.bash ]; then
. `brew --prefix`/etc/bash_completion.d/git-completion.bash
fi

最好的方法来检查您是否使用自制软件ist正确安装了git

brew info git

并检查git bash完成目录的安装目录的输出

最新版本的Git(1.7.12)还需要以下才能启用提示。

if [ -f `brew --prefix`/etc/bash_completion.d/git-prompt.sh ]; then
    . `brew --prefix`/etc/bash_completion.d/git-prompt.sh
fi

有关更多信息__git_ps1,请参见此堆栈中的superuser.com/a/477749/90231答案。
RichVel 2014年

26

您需要做的就是将git-completion.bash文件放置在用户主bin目录中,并将以下内容放置在您.profile.bash_profile文件中:

export PATH="$HOME/bin:$PATH"
source ~/bin/git-completion.bash
PS1='[\u@\h \w$(__git_ps1 " (%s)")]\$ '

这是要确保您的本地bin位于PATH中,并且该source命令可以使事情继续进行。然后,当然,更改PS1会将当前签出的分支放入提示中。

因此,无需安装MacPort即可安装GIT的“完成”版本(特别是如果您已经安装了该版本,则很烦人)。



1
对于那些想知道如何在PS1东西颜色结合起来,你看到提示:stackoverflow.com/questions/816790/...
Nickolay

1
更准确地说,git-completion.bash只需位于您的中$PATH。我决定放下我的东西,/usr/local/bin/这样我就不必修改现有的了$PATH
metavida 2011年

13

尽管当前答案对于较旧的MacPorts是正确的,但最新的MacPorts却出现了一个新问题,导致了相同的错误。

当前的bash-completion软件包(2.0 r1)至少需要bash 4.1才能正常运行。作为通常的OS X终端使用,/bin/bash它只会得到3.x。您必须/opt/local/bin/bash -l按照以下MacPorts文档中的说明更改终端设置以使用:http : //trac.macports.org/wiki/howto/bash-completion


这是最正确的答案,因为我在更新Macports之后才开始遇到问题。从终端使用macports bash的唯一缺点是,当我尝试关闭终端窗口时,它现在警告我终止正在运行的进程-您是否遇到了这个问题?
vitch 2012年


5

令人讨厌的是,这个问题又被打破了。这次是git伙计们,版本为1.7.12-1。为了使人们仅具有提示功能而没有完成功能(这会减慢速度),他们将提示功能从bash_completion / git中重构到了自己的文件git-prompt.sh中。

因此,按@Lara所述添加bash_completion只会使您完成操作(点击选项卡可完成标记/分支名称)。

要获取它,__git_ps1以便可以在PS1提示符中使用它,还需要将以下内容添加到〜/ .profile中。

. /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh

这里是一些背景-https: //bbs.archlinux.org/viewtopic.php?pid=1163632#p1163632



3

或与自制

brew install bash-completion git-extras

2
非常感谢。应该是brew install bash-completion git-extras(短划线而不是下划线)。
simonair


2

对于Mountain Lion和Mac-Ports,我需要在.bash_profile中使用以下行来使__git_ps1和完成功能正常运行:

# Bash shell command completion
if [ -f /opt/local/share/doc/git-core/contrib/completion/git-completion.bash ]; then
  . /opt/local/share/doc/git-core/contrib/completion/git-completion.bash
fi

if [ -f /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh ]; then
  . /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh
fi

1

我使用brew,所以似乎没有提供bash_completion运行所有脚本的主脚本bash_completion.d。建议仅运行一个脚本以添加git补全的解决方案是不可扩展的,因为不同的软件包将添加不同的补全脚本,并且您可能希望全部运行它们。因此,我将其(从Arch Linux改编)添加到的末尾/etc/bashrc

# source compat completion directory definitions
BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
if [[ -d $BASH_COMPLETION_COMPAT_DIR && -r $BASH_COMPLETION_COMPAT_DIR && \
    -x $BASH_COMPLETION_COMPAT_DIR ]]; then
    for i in $(LC_ALL=C command ls "$BASH_COMPLETION_COMPAT_DIR"); do
        i=$BASH_COMPLETION_COMPAT_DIR/$i
        [[ -f $i && -r $i ]] && . "$i"
    done
fi

1

至少对于Xcode 6,您已经拥有git-completion.bash。它在Xcode应用程序包中。

只需将其添加到您的.bashrc中:

source `xcode-select -p`/usr/share/git-core/git-completion.bash

这是唯一对我有效的答案。当您键入不完整的命令时,其他答案会产生奇怪的错误,例如git br<TAB>
r00m

0

除了亚当·约翰逊的职位

您还可以放置以下内容...

# MacPorts Bash shell command completion
if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi

...如果需要,在/ etc / profile中。

这样,系统上的所有用户都将从安装在目录“ /opt/local/etc/bash_completion.d/”中的所有bash完成脚本中受益。


0

尽管上述grundprinzip从2011年开始的答案仍然可以正常工作,但由于现在有一个Homebrew软件包bash-completionFormularepo),这使此操作变得更加容易,因此我想添加一个更新的答案。(这包括git以及其他常用工具的完成。)

今天,macOS随Bash 3一起提供,但是您brew install bash可以获得Bash4。如果您正在运行Bash 4,则安装较新的bash-completion 2.x分支。

重击4

  1. 跑:

    brew install bash-completion@2
  2. 添加到~/.bash_profile

    if [ -f /usr/local/share/bash-completion/bash_completion ]; then
      . /usr/local/share/bash-completion/bash_completion
    fi

重击3

如果您要在macOS上使用stock bash 3.x,请遵循以下说明。

  1. 跑:

    brew install bash-completion
  2. 添加到~/.bash_profile

    echo "[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion" >> ~/.bash_profile

参考:http : //davidalger.com/development/bash-completion-on-os-x-with-brew/


-2

我认为您可能忘记了在登录中获取文件.bashrc,可以添加如下内容:

. ./path/to/your/file.ext

使用+ .后跟空格在当前上下文中运行文件。

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.