(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

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

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

Изменить 10/13/12 - Решено Марком Лонгэйром (ниже)

Следующий код работал для меня, в то .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>?
Роб Майофф

Когда я набираю это, это заканчивается git help [пробел]
Джефф

Принятый ответ хороший, но приглашение также можно включить, нажав, git <tab>как указано в коммите, на который ссылается Марк Лонгэйр.
Джек Фрост

Это не только хороший, понятный вопрос, но и полезный ресурс, помогающий найти решение. Хорошо заслуженный голос.
Яннис Дран

Проверка -f работала, чтобы исправить эту ошибку при запуске bash внутри экрана (1) в OS X 10.8.5. Понятия не имею почему, поскольку файл существует независимо, но, тем не менее, спасибо!
Ник К9

Ответы:


324

Вы установили версию git-completion.bashfrom 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'должна работать нормально.


Вы правы, что я не хочу сам определять __git_ps1. Я просто пытался увидеть, узнает ли он это, и нет. У меня есть .git-creation.bash в моем корне. Я обновлю свой вопрос выше, чтобы включить, как я получил автоматическое завершение работы ...
Джефф

@ designer84: спасибо за дополнительную информацию - я думаю, теперь понятно, в чем проблема, и я обновил свой ответ объяснением.
Марк Лонгэйр

Почему это не работает? if [-f /usr/local/git/contrib/completion/git-completion.bash]; затем источник /usr/local/git/contrib/completion/git-completion.bash export PS1 = '[\ W] $ (__ git_ps1 "(% s)"):' fi
Джефф

5
На OSX 10.9 с git 1.8.5.3, установленной через Homebrew, оба git-prompt.shи git-completion.bashнаходятся в `brew --prefix git`/etc/bash_completion.d/.
Dokkaebi

1
В MacPorts путь изменился, когда пакет git-coreбыл заменен git, см. Этот вопрос
Рамон де ла Фуэнте

60

После обновления до OSX 10.9 Mavericks мне пришлось сослаться на следующие файлы, чтобы получить завершение команды оболочки git и приглашение 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

Хотя принятый ответ от @marklongair является хорошим описанием, я нашел этот вопрос с помощью поиска в Google сообщения об ошибке (после обновления до OS 10.10), и этот ответ является самым простым решением для моей проблемы (просто изменив путь к новому местоположению ).
RedBassett

Это работало для меня в 10.10.5 Yosemite, однако я изменил расположение git-prompt на ~/.git_prompt.sh. Другие решения не сработали.
Рейн

Я добавил предложенные вами строки в .bash_profile , но все еще получаю сообщение об ошибке:bash: __docker_machine_ps1: command not found
Игорь Ганапольский

43

Вам следует

$ brew установить bash

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


Отличный ответ, безусловно, лучший способ, если git установлен вместе с brew. Но я думаю, что вам нужно найти этот источник: source $ (brew --prefix) /etc/bash_completion.d/git-prompt.sh
febLey

1
@febLey Да, местоположение изменилось. Я обновил ответ. Спасибо.
Стивен Шоу

Это не работает Я получаю ошибки: bash: /usr/local/etc/bash_completion.d/git-prompt.sh: В доступе отказано bash: __docker_machine_ps1: команда не найдена
Игорь Ганапольский

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» на что-то другое, измените строку «os» в строке экспорта PS1.


Я все еще получаю сообщение об ошибке sh -c "clear && / bin / bash" bash: __docker_machine_ps1: команда не найдена каждый раз, когда я вхожу в Docker CLI.
Игорь Ганапольский

8

Решение для 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. Откройте свой профиль оболочки:
    • 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-creation.bash]; затем
          export PS1 = '\ w $ (__ git_ps1 "(% s)")>'
    фи
  2. Сохраните и используйте профиль: source ~/.bash_profileилиsource ~/.bashrc

Теперь вы должны увидеть, что приглашение git работает правильно и показывает, в какой ветке вы находитесь сейчас.

5

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

Я просто пришлось изменить , ~/.bashrcчтобы source /usr/local/etc/bash_completion.d/git-prompt.shвместо старого пути.

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


5

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

4

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


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: команда не найдена
Игорь Ганапольский

2

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


1
@IgorGanapolsky Полагаю, у вас не установлены macports ? Просто делай touch ~/.profile. Но вы , очевидно , нужен файл: /opt/local/share/git-core/git-prompt.sh
ворачиваются

2

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

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

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

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

варить git

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


2

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

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

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

2
  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

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

У меня были некоторые странные проблемы с источником 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

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


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\]\$ '

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

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

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


0

Для мерзавца есть /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
Игорь Ганапольский

0

Предисловие: извините за то, что не комментируете ответ на вопрос haysclark и не делаете новый , просто недостаточно повторений.

Обратите внимание, что если вы не установили git через Xcode или home-brew, вы, скорее всего, найдете bash-скрипты, на которые ссылается haysclarks /Library/Developer/CommandLineTools/, а не в /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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.