it-roy-ru.com

(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 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 version 1.7.12.1

Это должно быть простое изменение. Может кто-нибудь, пожалуйста, помогите мне?

Редактировать 13.10.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.

Edit 10/13/12 - Решено Марк Лонгэйр (ниже)

Следующий код работал для меня в .bash_profile, в то время как другие не ...

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

Вы установили версию git-completion.bash из master - в истории разработки git это происходит после коммита, который разделяет функцию __git_ps1 из функциональности завершения в новый файл (git-Prompt.sh). Фиксация, которая ввела это изменение, которое объясняет обоснование, является af31a456 .

Я бы по-прежнему предлагал вам просто указать версию git-completion.bash (или git-Prompt.sh), которая поставляется вместе с вашей установкой git.

Однако, если по какой-то причине вы все еще хотите использовать эту функцию, используя скрипты, отдельно загружаемые из 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', должна работать нормально.

282
Mark Longair

После обновления до OSX 10.9 Mavericks мне пришлось сослаться на следующие файлы, чтобы завершить команду git Shell и снова запустить git Prompt.

Из моего .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)")\$ '
57
haysclark

Вам следует

$ brew установить bash bash-завершение git

Затем укажите источник "$ (brew --prefix)/etc/bash_completion" в вашем .bashrc.

34
Steven Shaw

Следующее сработало для меня как шарм:

Запустите следующее в вашем терминале:

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. 

12
Undefined

Решение для MacOS Sierra и git версии 2.10.1 <2017-2-06>

Шаг 1: Установите Git

Вы можете пропустить этот шаг, если вы уже установили последнюю версию git.

Загрузите пакет git из браузера https://git-scm.com/download/

Примечание: если вы устанавливаете с опцией curl [option] https://... для загрузки, вам необходимо убедиться, что ваша система поддерживает SSL. Так что для новичка загрузка из браузера и установка непосредственно из установщика git намного проще.

  • Покажите, где находится ваш каталог git по адресу: which git 
  • Покажите, какая версия вашего git в настоящее время: git --version текущая версия должна быть 2.10.1. 

Шаг 2: добавьте свой профиль git в свою оболочку

  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

Примечание: место установки git изменилось с opt/directory на usr/local/после обновления OSX до El Capitain, и именно поэтому некоторые из старых ответов выше не работают в 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-extension.bash]; затем
     export PS1 = '\ w $ (__ git_ps1 "(% s)")>' 
     fi
  2. Сохраните и используйте профиль: source ~/.bash_profile или source ~/.bashrc

7
frzhen

У меня была такая же проблема при обновлении до Yosemite.

Мне просто нужно было изменить ~/.bashrc на source /usr/local/etc/bash_completion.d/git-Prompt.sh вместо старого пути.

затем повторно введите свой . ~/.bashrc, чтобы получить эффект.

5
chovy

__git_ps1 для bash теперь находится в git-Prompt.sh в /usr/local/etc/bash_completion.d на моем brew, установленном git версии 1.8.1.5

4
traday

High 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" "\\\$ "'
2
luzik

Если вы надеетесь использовать Homebrew для обновления Git и вы позволили вашей системе вообще устареть (как я это сделал), вам, возможно, потребуется сначала обновить сам Homebrew (согласно Обновление brew: следующие неотслеживаемые файлы рабочего дерева будут перезаписаны слиянием: спасибо @ chris-frisina)

Сначала приведите Homebrew в соответствие с текущей версией

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

Затем обновите Git:

варить git

Задача решена! ;-)

2
Day Davis Waterbury

это работает в OS 10.8 в .bash_profile 

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

По крайней мере, с Xcode 6 у вас уже есть git-completion.bash. Это внутри пакета приложения Xcode.

Просто добавьте это в ваш .bashrc:

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

Для macports мне пришлось добавить: source /opt/local/share/git-core/git-Prompt.sh в мой ./profile

2
velop
  1. Загрузите файлы git-Prompt.sh и git-creation.bash из этого завершение Git
  2. Переименуйте файлы.
  3. Переместите эти файлы в свой домашний каталог.
  4. Добавьте исходный файл в .bash_profile

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

Я знаю, что это не настоящий ответ ...

У меня были некоторые странные проблемы с поиском git-Prompt.sh в моем .bashrc, поэтому я начал искать другое решение. Этот: http://www.jqno.nl/post/2012/04/02/howto-display-the-current-git-branch-in-your-Prompt/ не использует __git_ps1 и автора утверждает, что он работает и на Mac (сейчас он отлично работает на моем Ubuntu и легко настраивается).

Я надеюсь, что это помогает!

1
op1ekun

Я делал курс по 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"

Это работает! https://i.stack.imgur.com/d0lvb.jpg

1
superheron

Для мерзавца есть /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
0
liudongmiao

Этот работал для меня, и у него есть цветной вывод 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\]\[email protected]\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '

Обязательно используйте правильный путь! Я использовал homebrew для установки git, используйте brew list git, чтобы получить путь к вашей текущей установке.

Было бы неплохо не использовать жестко закодированный путь, но не знаю, как получить путь к текущей установке.

Больше информации здесь: http://en.newinstance.it/2010/05/23/git-autocompletion-and-enhanced-bash-Prompt/

0
Joshua Muheim