(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файл.

Редагувати 13.10.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 [space]
Джефф

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

Це не лише гарне чітке запитання, але й корисний посібник для вирішення рішення. Заслужений результат.
Янніс Дран

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

Відповіді:


324

Ви встановили версію 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'має працювати нормально.


Ви маєте рацію, що я не хочу сам визначати __git_ps1. Я просто намагався зрозуміти, чи визнає це, а це не так. У мене є .git-fill.bash у мене на корені. Я оновлю своє запитання вище, щоб включити, як я працюю над автозавершенням ...
Джефф

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

Чому це не працює? якщо [-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, дивіться це питання
Ramon de la Fuente

60

Після оновлення до 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)")\$ '

Це також було моєю проблемою в osv 10.9
jeremyjjbrown

Хоча прийнята відповідь від @marklongair - це хороший опис, я знайшов це запитання за допомогою пошуку в Google повідомлення про помилку (після оновлення до ОС 10.10), і ця відповідь є найпростішим рішенням моєї проблеми (просто змінити шлях до нового місця розташування ).
RedBassett

Це працювало для мене в 10.10.5 Yosemite, проте я змінив місце розташування git-prompt на ~/.git_prompt.sh. Інші рішення не спрацювали.
Рейн

Я додав запропоновані рядки до .bash_profile , але все ще отримую помилку:bash: __docker_machine_ps1: command not found
ІгорГанапольський

43

Ти повинен

$ brew install bash bash-завершення git

Тоді джерело "$ (brew - prefix) / etc / bash_completion" у вашому .bashrc.


Чудова відповідь, безумовно, найкращий спосіб, якщо git встановлений заварюванням. Але я думаю, вам потрібно це джерело: source $ (brew
prefix

1
@febLey Так, місце змінилось. Я оновив відповідь. Дякую.
Стівен Шов

Це не працює. Я отримую помилки: bash: /usr/local/etc/bash_completion.d/git-prompt.sh: У дозволі відхилено bash: __docker_machine_ps1: команду не знайдено
IgorGanapolsky

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 / каталога на 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: Додати сценарій вибору

    якщо [-f ~ / .git-завершення.bash]; тоді
          експортувати PS1 = '\ w $ (__ git_ps1 "(% s)")>'
    фі
  2. Збережіть і використовуйте профіль: source ~/.bash_profileабоsource ~/.bashrc

Тепер вам слід побачити, як git-підказка працює належним чином, і показує, в якій галузі ви зараз перебуваєте.

5

У мене була така ж проблема, коли я перейшов до Йосеміті.

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

потім перезавантажте свою, . ~/.bashrcщоб отримати ефект.


5

Чистий розчин 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 на моїй варі, встановленій git версії 1.8.1.5



2

Для макпортів мені довелося додати: source /opt/local/share/git-core/git-prompt.shдо свого ./profile


1
@IgorGanapolsky Я думаю, у вас немає встановлених макпортів ? Просто робіть touch ~/.profile. Але ви , очевидно , потрібен файл: /opt/local/share/git-core/git-prompt.sh
повертаються

2

Якщо ви сподіваєтесь використовувати Homebrew для оновлення Git, і ви дозволили вашій системі взагалі застаріти (як я це зробив), можливо, вам потрібно буде спочатку оновити сам Homebrew (відповідно до оновлення варіння) : Злиття буде замінено на такі файли, які не будуть відслідковувати робоче дерево: спасибо @ chris-frisina)

Спочатку приведіть Homebrew у відповідність до поточної версії

cd / usr / local
git fetch origin origin
git reset - тверде походження / 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- complete.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\]\$ '

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

Було б непогано використовувати жорсткий кодований шлях, але не знаю, як отримати шлях до поточної установки.

Більше інформації тут: http://en.newinstance.it/2010/05/23/git-autocompletion-and-enhanced-bash-prompt/


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

Ця помилка все-таки отримує:bash: __docker_machine_ps1: command not found
ІгорГанапольський

0

Передмова: вибачте за те, що не коментуєте відповідь хайскларка і не заздалегідь зробили її заново, просто недостатньо представника.

Не забувайте, що якщо ви не встановили git через Xcode або домашню заварку, ви, швидше за все, знайдете баш-скрипти, на які січні клавіші посилаються на /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.