(Mac)-bash:__git_ps1:找不到命令


222

我正在尝试在终端中更改命令提示符。我不断收到错误:

-bash: __git_ps1: command not found

我已经尝试过,只需在终端中按原样输入:__git_ps1。我也已经在.bash_profile

if [ -f ~/.git-completion.bash ]; then
  source ~/.git-completion.bash
  export PS1='[\W]$(__git_ps1 "(%s)"): '
fi

您可能会看到/告诉,是的,我确实安装了自动完成功能,并且效果很好!

我遇到了这个问题:“ PS1 env变量在Mac上不起作用 ”,它给出了代码

alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \(.*\)/(\1)/'"

因此,我将其添加到我.bash_profile希望它会有所改变的地方。好吧,它做到了。它只是更改了错误输出。

这是.bash_profile附加的:

alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \(.*\)/(\1)/'"

if [ -f ~/.git-completion.bash ]; then
  source ~/.git-completion.bash
  export PS1='[\W]$(__git_ps1 "(%s)"): '
fi

现在这是更改后的错误输出:

sed: (%s): No such file or directory

注意:我也将别名移到了源下方,没有区别。我有 git版本1.7.12.1

这应该是一个简单的更改。有人可以帮帮我吗?

编辑10/13/12

不,我绝对不想自己定义__git_ps1,而只是想查看这样做是否可以识别它。是的,我已经.git-completion.bash安装了文件。这是我在计算机上自动完成的方式。

cd ~
curl -OL https://github.com/git/git/raw/master/contrib/completion/git-completion.bash
mv ~/git.completion.bash ~/.git-completion.bash

ls -la则列出.git-completion.bash文件。

编辑10/13/12-由马克·朗伊尔Mark Longair)解决(下)

以下代码对我有用,.bash_profile而其他代码则不行。

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='Geoff[\W]$(__git_ps1 "(%s)"): '
fi

我的git-completion.bash定义__git_ps1是一个外壳函数。是你的吗?您怎么知道完成工作?键入git h<TAB> 会发生什么?
rob mayoff 2012年

当我输入时,它以git help [space]结尾
Geoff 2012年

接受的答案很好,但是也可以通过git <tab>按Mark Longair引用的提交中的提示来启用提示。
Jack Frost

这不仅是一个很好的简单问题,而且是指导解决方案的有用资源。一个当之无愧的投票。
Yannis Dran 2014年

在OS X 10.8.5上的screen(1)内运行bash时,-f检查可解决此错误。不知道为什么,因为文件无论如何都存在,但还是要感谢!
尼克K9 2014年

Answers:


324

您已经在git的开发历史记录中安装了git-completion.bashfrom 的版本,master这是在提交后将__git_ps1功能从完成功能拆分为新文件(git-prompt.sh)的版本。引入此更改的提交是af31a456,它解释了基本原理。

我仍然建议您仅提供与git安装捆绑在一起的git-completion.bash(或git-prompt.sh)版本。

但是,如果由于某些原因您仍然希望通过使用从单独下载的脚本来使用此功能master,则应git-prompt.sh类似地下载:

curl -o ~/.git-prompt.sh \
    https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh

...并将以下行添加到您的~/.bash_profile

source ~/.git-prompt.sh

然后PS1,包含的变量__git_ps1 '%s'应该可以正常工作。


您是对的,我不想自己定义__git_ps1。我只是想看看它是否可以识别它,而不能识别。我的根上确实有.git-completion.bash。我将在上面更新我的问题,以包括如何完成自动完成工作...
Geoff 2012年

@ designer84:感谢您提供其他信息-我认为现在很清楚问题出在哪里,并且我在解释中更新了答案。
Mark Longair

为什么这不起作用?如果[-f /usr/local/git/contrib/completion/git-completion.bash];然后来源/usr/local/git/contrib/completion/git-completion.bash export PS1 ='[\ W] $(__ git_ps1“(%s)”):'fi
Geoff

5
在OSX 10.9通过自制安装的git 1.8.5.3,都git-prompt.shgit-completion.bash在被发现`brew --prefix git`/etc/bash_completion.d/
dokkaebi 2014年

1
在MacPorts中,当用git-core替换软件包时,路径改变了git,请参阅此问题
Ramon de la Fuente

60

升级到OSX 10.9 Mavericks后,我必须引用以下文件来完成git shell命令的完成和git提示符才能再次工作。

从我的.bash_profile或类似文件中:

if [ -f /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-completion.bash ]; then
    . /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-completion.bash
fi

source /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh

#shell prompt example
PS1='\u $(__git_ps1 "(%s)")\$ '

这也是我在OSV 10.9中的问题
jeremyjjbrown 2014年

虽然接受@marklongair的答复是一个很好的说明,但我通过Google搜索错误消息(升级到OS 10.10之后)发现了这个问题,而这个答案是我问题的最简单解决方案(只需将路径更改为新位置) )。
RedBassett 2014年

这在10.10.5优胜美地对我有用,但是我将git-prompt的位置更改为~/.git_prompt.sh。其他解决方案无效。
赖因

我将您建议的行添加到.bash_profile,但仍然出现错误:bash: __docker_machine_ps1: command not found
IgorGanapolsky

43

你应该

$ brew install bash bash-completion git

然后在您的.bashrc中获取“ $(brew --prefix)/ etc / bash_completion”。


好的答案,如果将brew与git一起安装,绝对是最好的方法。但是我认为您需
要这样做

1
@febLey是的,位置已更改。我已经更新了答案。谢谢。
史蒂文·肖

这行不通。我收到错误消息:bash:/usr/local/etc/bash_completion.d/git-prompt.sh:权限被拒绝bash:__docker_machine_ps1:找不到命令
IgorGanapolsky 2016年

14

以下对我来说很有吸引力:

在终端中运行以下命令:

curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > ~/.bash_git

打开/创建bash_profile:

$ vi ~/.bash_profile

在文件中添加以下内容:

source ~/.bash_git
export PS1='\[\033[01;32m\]os \[\033[01;34m\]\w $(__git_ps1 "[%s]")\$\[\033[00m\] '
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWUPSTREAM="auto"

最后,使用以下命令获取它:

$ source ~/.bash_profile

这将解决的问题bash: __git_ps1: command not found

您的提示也将变为“ os”。要将“ os”更改为其他内容,请在导出PS1行中修改“ os”字符串。


我仍然收到错误sh -c“ clear && / bin / bash” bash:__docker_machine_ps1:每次我进入Docker CLI时都找不到命令。
IgorGanapolsky '16

8

MacOS Sierra和git 2.10.1版本的解决方案<2017-2-06>

步骤1:安装Git

如果您已经安装了最新的git,则可以跳过此步骤。

从浏览器https://git-scm.com/download/下载git包

注意:如果安装了curl [option] https://...下载选项,则必须确保系统支持SSL。因此,对于新手来说,从浏览器下载并直接从git installer安装会容易得多。

安装验证:
  • 在以下位置显示您的git目录: which git
  • 显示您的git当前是哪个版本:git --version当前版本应为2.10.1。

步骤2:将git个人资料添加到您的shell

  1. 打开您的外壳配置文件:
    • nano ~/.bash_profilenano ~/.bashrc取决于您的修改位置。
  2. 将以下代码添加到文件中:
    • source /usr/local/git/contrib/completion/git-completion.bash
    • source /usr/local/git/contrib/completion/git-prompt.sh

注意:在OSX升级到El Capitain之后,git的安装位置从opt /目录更改为usr / local /,这就是为什么上面的某些旧答案在MacOS Sierra中不再起作用的原因。

  1. 将以下代码添加到您的PS1配置中:

    • 选项1:直接添加到您的PS1: export PS1='\w$(__git_ps1 "(%s)") > '

      我喜欢这种简单的方法,因为我已经知道.git-completion.bash主目录中有,并且可以在其前面添加其他提示格式。这是我的个人提示供您参考:export PS1='\t H#\! \u:\w$(__git_ps1 "{%s}") -->> '
    • 选项2:添加选择脚本

    如果[-f〜/ .git-completion.bash]; 然后
          export PS1 ='\ w $(__ git_ps1“(%s)”)>'
    科幻
  2. 保存并使用配置文件:source ~/.bash_profilesource ~/.bashrc

现在,您应该会看到git提示符正常运行,并显示您当前所在的分支。

5

升级到优胜美地时,我遇到了同样的问题。

我只需要修改~/.bashrcsource /usr/local/etc/bash_completion.d/git-prompt.sh而不是旧路径。

然后重新. ~/.bashrc获得您的效果。


5

高色拉清洁溶液,带颜色!

没有下载。不喝酒 没有Xcode

只需将其添加到您的〜/ .bashrc或〜/ .bash_profile中

export CLICOLOR=1
[ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh ] && . /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh
export GIT_PS1_SHOWCOLORHINTS=1
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWUPSTREAM="auto"
PROMPT_COMMAND='__git_ps1 "\h:\W \u" "\\\$ "'

4

现在在我安装的brew git版本1.8.1.5的/usr/local/etc/bash_completion.d中的git-prompt.sh中找到用于bash的__git_ps1


2

这适用于OS 10.8中的.bash_profile

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='YOURNAME[\W]$(__git_ps1 "(%s)"): '
fi

无法修复错误:bash:__docker_machine_ps1:找不到命令
IgorGanapolsky 2016年

2

对于Macport,我必须source /opt/local/share/git-core/git-prompt.sh在我的./profile中添加:


1
@IgorGanapolsky我猜你没有使用MacPorts安装?简单地做touch ~/.profile。但是您显然需要以下文件:/opt/local/share/git-core/git-prompt.sh
velop


2

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

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

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

2
  1. 从此Git完成下载文件git-prompt.shgit- completion.bash
  2. 重命名文件。
  3. 将这些文件移动到您的主目录。
  4. 将源文件添加到.bash_profile中

    source ~/git-completion0.bash
    source ~/git-prompt0.sh
    and four to trigger the code block.
    

1

我知道这不是一个真正的答案...

我在.bashrc中采购git-prompt.sh时遇到了一些奇怪的问题,因此我开始寻找其他解决方案。这个:http : //www.jqno.nl/post/2012/04/02/howto-display-the-current-git-branch-in-your-prompt/不使用__git_ps1,作者声称它也可以在Mac上(目前它可以在我的Ubuntu上完美运行,并且很容易调整)。

希望对您有所帮助!


1

我在git hub的Udacity上进行课程,遇到了同样的问题。这是make可以正常工作的最终代码。

# Change command prompt
alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \ .   (.*\)/(\1)/'"

if [ -f ~/.git-completion.bash ]; then
  source ~/.git-completion.bash
  export PS1='[\W]$(__git_ps1 "(%s)"): '
fi

source ~/.git-prompt.sh
export GIT_PS1_SHOWDIRTYSTATE=1
# '\u' adds the name of the current user to the prompt
# '\$(__git_ps1)' adds git-related stuff
# '\W' adds the name of the current directory
export PS1="$purple\u$green\$(__git_ps1)$blue \W $ $reset"

有用! https://i.stack.imgur.com/d0lvb.jpg


0

这对我有用,它为git输出加了彩色,并在提示符下显示了是否更改/添加了文件的指示符,将其正确烘焙到其中:

GIT_PS1_SHOWDIRTYSTATE=true

. /usr/local/Cellar/git/1.8.5.2/etc/bash_completion.d/git-completion.bash
. /usr/local/Cellar/git/1.8.5.2/etc/bash_completion.d/git-prompt.sh

PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '

确保使用正确的路径!我使用自制软件安装git,用于brew list git获取当前安装的路径。

最好不要使用硬编码的路径,但是不知道如何获取当前安装的路径。

此处提供更多信息:http : //en.newinstance.it/2010/05/23/git-autocompletion-and-enhanced-bash-prompt/


0

对于git,有/Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh。并且也请看/etc/bashrc_Apple_Terminal

所以,我把它们放在~/.bash_profile

if [ -f /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh ]; then
  . /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh
  export GIT_PS1_SHOWCOLORHINTS=1
  export GIT_PS1_SHOWDIRTYSTATE=1
  PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }__git_ps1 '\u:\w' '\\\$ '"
fi

仍然出现此错误:bash: __docker_machine_ps1: command not found
IgorGanapolsky '16

0

前言:很抱歉没有评论haysclark的答案并提出一个新的答案,只是代表不够。

请不要这样,如果您尚未通过Xcode或home-brew安装git,则可能会在/Library/Developer/CommandLineTools/而不是中找到haysclarks所指的bash脚本/Applications/Xcode.app/Contents/Developer/,因此使这些行包含在.bashrc中,如下所示:

if [ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ]; then
    . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
fi

source /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh

如果还希望使用git-prompt,则需要这些行。

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.