(Mac)-bash:__ git_ps1:找不到命令

时间:2012-10-13 07:20:44

标签: macos git terminal ps1

我正在尝试在终端中更改我的命令promt。我一直收到错误:

-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 variable does not work on 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

19 个答案:

答案 0 :(得分:288)

你已经从git-completion.bash安装了master的版本 - 在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

然后,包含PS1的{​​{1}}变量应该可以正常工作。

答案 1 :(得分:57)

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

答案 2 :(得分:38)

你应该

$ brew install bash bash-completion git

然后来源" $(brew --prefix)/ etc / bash_completion"在你的.bashrc中。

答案 3 :(得分:12)

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

在终端中运行以下内容:

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"对别的东西,修改" os"导出PS1行中的字符串。

答案 4 :(得分:7)

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_profile nano ~/.bashrc 取决于修改的位置。
  2. 将以下代码添加到文件中:
    • source /usr/local/git/contrib/completion/git-completion.bash
    • source /usr/local/git/contrib/completion/git-prompt.sh
  3. 注意:在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:添加选择脚本

      if [ -f ~/.git-completion.bash ]; then
            export PS1='\w$(__git_ps1 "(%s)") > '
      fi
    2. 保存并使用个人资料:source ~/.bash_profilesource ~/.bashrc

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

答案 5 :(得分:5)

升级到Yosemite时遇到同样的问题。

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

然后重新获取. ~/.bashrc以获得效果。

答案 6 :(得分:4)

bash的

__ git_ps1现在可以在/usr/local/etc/bash_completion.d的git-prompt.sh中找到我的brew安装的git版本1.8.1.5

答案 7 :(得分:2)

对于macports,我必须将source /opt/local/share/git-core/git-prompt.sh添加到我的./profile

答案 8 :(得分:2)

如果您希望使用Homebrew升级Git,并且您的系统一般会变得过时(就像我一样),您可能需要将Homebrew本身提升到 - 首先约会(根据brew update: The following untracked working tree files would be overwritten by merge:感谢@ chris-frisina)

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

  

cd / usr / local
  git fetch origin
  git reset --hard origin / master

然后更新Git:

  

brew upgrade git

解决了问题! ; - )

答案 9 :(得分:2)

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

只需将其添加到.bashrc:

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

答案 10 :(得分:2)

这适用于.bash_profile

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

答案 11 :(得分:2)

带有颜色的高Sierra清洁解决方案!

没有下载。没有酿造。没有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" "\\\$ "'

答案 12 :(得分: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上完美运行并且很容易调整)。

我希望它有所帮助!

答案 13 :(得分:1)

我在Udacity上为git hub做过课程,并且遇到了同样的问题。这是我的最终代码,使得工作正常。

{{1}}

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

答案 14 :(得分:1)

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

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

答案 15 :(得分: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/

答案 16 :(得分: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

答案 17 :(得分:0)

请不要这样,如果您尚未通过Xcode或自家安装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,则需要这些行。 [1]:https://stackoverflow.com/a/20211241/4795986

答案 18 :(得分:0)

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

运行(brew updatebrew 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

我很高兴。