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

我正在尝试更改终端中的命令提示符。我总是得到错误:

-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环境变量不能在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

< em >注意:< / em >我也将别名移动到源代码下面,没有区别。我有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
146910 次浏览

你已经从master安装了git-completion.bash的版本——在git的开发历史中,这是在将__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

那么包含__git_ps1 '%s'PS1变量应该可以正常工作。

bash的__git_ps1现在在/usr/local/etc/bash_completion的git-prompt.sh中找到。D在我的brew上安装了git 1.8.1.5版本

我知道这不是真正的答案……

我在我的.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上工作完美,很容易调整)。

我希望这能有所帮助!

这在OS 10.8的.bash_profile中工作

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

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

这个对我来说很有用,它有彩色的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/

对于macports,我必须在我的./配置文件中添加:source /opt/local/share/git-core/git-prompt.sh

你应该

$ brew安装bash bash完成git

然后在你的.bashrc中输入“$(brew——prefix)/etc/bash_completion”。

如果你希望使用Homebrew来升级Git,并且你已经让你的系统变得过时了(就像我做的那样),你可能需要先让Homebrew本身更新(根据以下未被跟踪的工作树文件将被merge覆盖:谢谢@chris-frisina)。

首先让Homebrew与当前版本保持一致

< p > cd /usr/local < br > get origin
Git重置——hard origin/master

然后更新Git:

Brew升级git

问题解决了!: -)

我升级到约塞米蒂时也遇到了同样的问题。

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

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

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

只要把这个添加到你的.bashrc中:

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

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

以下内容对我来说非常有效:

在终端运行以下命令:

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”字符串。

针对MacOS Sierra和git版本2.10.1 <2017-2-06>

步骤1:安装Git

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

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

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

安装验证:
  • 显示你的git目录:which git
  • 显示当前git的版本:git --version当前版本应该是2.10.1。

步骤2:将git配置文件添加到shell中

  1. 打开shell配置文件:
    • nano ~/.bash_profilenano ~/.bashrc取决于你的修改在哪里。
    • 李< / ul > < / >
    • 在文件中添加如下代码:
      • source /usr/local/git/contrib/completion/git-completion.bash
      • source /usr/local/git/contrib/completion/git-prompt.sh
      • 李< / ul > < / >

注意:在OSX升级到El Capitain后,git的安装位置从opt/ directory更改为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:添加选择脚本

    if [ -f ~/.git-completion.bash ]; then
    export PS1='\w$(__git_ps1 "(%s)") > '
    fi
  2. Save and use the profile: source ~/.bash_profile or source ~/.bashrc

Now you should see the git prompt working properly and shows which branch you are in right now.

我当时在Udacity上为git中心上课程,也遇到了同样的问题。这是我的最终代码,使它正确工作。

# 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"
< p >它工作! https://i.stack.imgur.com/d0lvb.jpg < / p >
  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.
    

高Sierra清洁解决方案与颜色!

没有下载。没有啤酒。没有Xcode

只需将其添加到~/。bashc或~/.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" "\\\$ "'

请不要这样,如果你没有通过Xcode或自制安装git,你可能会发现hayclarks在/Library/Developer/CommandLineTools/中引用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,你也需要这些行。 [1]: https://stackoverflow.com/a/20211241/4795986 < / p >

我刚刚在Mojave上安装的另一个选项:magicmonty / bash-git-prompt

运行(brew update)和brew install bash-git-promptbrew install --HEAD bash-git-prompt

然后到你的~/.bash_profile~/.bashrc:

if [ -f "$(brew --prefix)/opt/bash-git-prompt/share/gitprompt.sh" ]; then
__GIT_PROMPT_DIR=$(brew --prefix)/opt/bash-git-prompt/share
GIT_PROMPT_ONLY_IN_REPO=1
source "$(brew --prefix)/opt/bash-git-prompt/share/gitprompt.sh"
fi

我很高兴。

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


[[ -f ~/.git-prompt.bash ]]       && . ~/.git-prompt.bash
# Available GIT_PS1 options/env vars


cat ~/.git-prompt.bash | grep GIT_PS1_ | sed -r 's,^\s*#.*,,' | grep -v -E '^$' | sed -r 's,^.*(GIT_PS1_[A-Z_]+).*,\1,' | sort | uniq | sed -r 's,^(.*)$,export \1=,'
export GIT_PS1_COMPRESSSPARSESTATE=
export GIT_PS1_DESCRIBE_STYLE=
export GIT_PS1_HIDE_IF_PWD_IGNORED=
export GIT_PS1_OMITSPARSESTATE=
export GIT_PS1_SHOWCOLORHINTS=
export GIT_PS1_SHOWDIRTYSTATE=
export GIT_PS1_SHOWSTASHSTATE=
export GIT_PS1_SHOWUNTRACKEDFILES=
export GIT_PS1_SHOWUPSTREAM=
export GIT_PS1_STATESEPARATOR=


for i in $(cat ~/.git-prompt.bash | grep GIT_PS1_ | sed -r 's,^\s*#.*,,' | grep -v -E '^$' | sed -r 's,^.*(GIT_PS1_[A-Z_]+).*,\1,' | sort | uniq); do varname=$i; declare -g ${i}=1; done
# P.S Above is just illustration not all config vars are [0/1].


# For more info:


cat ~/.git-prompt.bash | sed -r -n -e '1,/^[^\s*#]/p' | head -n -2

拷贝/下载以下文件,并将它们复制到主目录:~/

git- complete .bash . bat

git-prompt.sh .sh

对于bash_profile,在开头添加这个:

source ~/git-completion.bash
source ~/git-prompt.sh
export GIT_PS1_SHOWDIRTYSTATE=1

想要更多更简单的下载,你可以检查这个