88

Я следовал http://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live-without, чтобы добавить git-completion.bash creation.bash в мой /opt/local/etc/bash_completion.d/git-completion

и я положил PS1='\h:\W$(__git_ps1 "(%s)") \u\$ ' в мой .bashrc_profile

Но теперь я получаю эту -bash: __git_ps1: command not found все, что я делаю на cd .

Подскажите, пожалуйста, что мне не хватает?

14 ответов14

65

Я установил git с помощью MacPorts на мою новую установку Snow Leopard. После установки MacPorts из образа .dmg это будут команды в Terminal.app:

sudo port selfupdate
sudo port install git-core +bash_completion

Если вам также нужна поддержка для извлечения из SVN-репозиториев и документов, используйте это вместо второй строки:

sudo port install git-core +bash_completion +doc +svn

Затем добавьте следующее в ваш ~/.profile или ~/.bash_profile:

# MacPorts Bash shell command completion
if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi

или для MacPorts начиная с версии 2.1.2 на Mountain Lion:

# MacPorts Bash shell command completion
if [ -f /opt/local/etc/profile.d/bash_completion.sh ]; then
  . /opt/local/etc/profile.d/bash_completion.sh
fi

или для MacPorts с более новыми версиями git:

if [ -f /opt/local/share/git-core/git-prompt.sh ]; then
    . /opt/local/share/git-core/git-prompt.sh
fi

Примечание: bash 4.1 или выше требуется для bash_completion.sh. Если завершение не работает, попробуйте echo $BASH_VERSION чтобы увидеть, в этом ли проблема. Если это так, введите MacPorts bash, набрав bash и попробуйте снова выполнить git завершение.

55

Если вы установили git с помощью homebrew, вы можете немного изменить совет MacPorts и добавить его в свои .bash_profile и .bashrc

if [ -f `brew --prefix`/etc/bash_completion.d/git-completion.bash ]; then
. `brew --prefix`/etc/bash_completion.d/git-completion.bash
fi

Лучший способ проверить, правильно ли установлен git с помощью homebrew ist для выполнения

brew info git

и проверьте вывод для каталога установки завершения git bash

В последней версии Git (1.7.12) также требуется следующее, чтобы включить приглашение.

if [ -f `brew --prefix`/etc/bash_completion.d/git-prompt.sh ]; then
    . `brew --prefix`/etc/bash_completion.d/git-prompt.sh
fi
26

Все, что вам нужно сделать, это поместить файл git-completion.bash в ваш домашний каталог bin и поместить следующее в файл .profile или .bash_profile :

export PATH="$HOME/bin:$PATH"
source ~/bin/git-completion.bash
PS1='[\u@\h \w$(__git_ps1 " (%s)")]\$ '

Что это делает, так это убедитесь, что ваша локальная корзина находится в переменной PATH, а source команда работает. Затем, конечно, изменение PS1 помещает текущую проверенную ветку в приглашение.

Таким образом, не нужно устанавливать MacPort, чтобы затем установить "завершающую" версию GIT (особенно раздражает, если она у вас уже установлена).

13

Хотя текущий ответ верен для старых MacPorts, существует новая проблема с самыми последними MacPorts, приводящая к той же ошибке.

Текущий пакет завершения bash (2.0 r1) требует как минимум bash 4.1 для правильной работы. Как обычно OS X Terminal использует /bin/bash он получает только 3.x. Вы должны изменить настройки терминала для использования /opt/local/bin/bash -l как описано в документации MacPorts здесь: http://trac.macports.org/wiki/howto/bash-completion

6

Вам необходимо найти функции завершения команды. Добавьте в свой .bashrc_profile перед PS1:

. /opt/local/etc/bash_completion.d/git-completion
5

Досадно, что это было сломано еще раз. На этот раз его парни с версией 1.7.12-1. Чтобы позволить людям иметь только функцию подсказки без функции завершения (что может замедлить работу), они реорганизовали функцию подсказки из bash_completion/git в свой собственный файл git-prompt.sh.

Поэтому добавление bash_completion, как описано @Lara, только завершит вас (нажатие на вкладку завершает имена тегов / веток).

Чтобы получить __git_ps1 чтобы вы могли использовать его в приглашении PS1, вам также необходимо добавить следующее в ваш ~/.profile.

. /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh

Некоторая справка здесь - https://bbs.archlinux.org/viewtopic.php?pid=1163632#p1163632

3

Или с доморощенным

brew install bash-completion git-extras
2

Нашел решение по похожему вопросу:

ГИТ-OSX-инсталлятор поставляется с git-completion.bash и устанавливает его в /usr/local/git/contrib/completion/ Просто получите этот файл из вашего .bash_profile чтобы получить __git_ps1 .

2

Для Mountain Lion и Mac-Ports мне нужно было использовать следующие строки в моем .bash_profile, чтобы получить и __git_ps1, и дополнения для нормальной работы:

# Bash shell command completion
if [ -f /opt/local/share/doc/git-core/contrib/completion/git-completion.bash ]; then
  . /opt/local/share/doc/git-core/contrib/completion/git-completion.bash
fi

if [ -f /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh ]; then
  . /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh
fi
1

Я использую brew, так что основной сценарий bash_completion который запускает все из bash_completion.d видимому, не предусмотрен. Решения, которые предлагают просто запустить один скрипт для добавления завершений git, не расширяемы, потому что разные пакеты будут добавлять разные скрипты завершения, и вы, вероятно, захотите запустить их все. Поэтому я добавил это (адаптировано из Arch Linux) в конец /etc/bashrc:

# source compat completion directory definitions
BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
if [[ -d $BASH_COMPLETION_COMPAT_DIR && -r $BASH_COMPLETION_COMPAT_DIR && \
    -x $BASH_COMPLETION_COMPAT_DIR ]]; then
    for i in $(LC_ALL=C command ls "$BASH_COMPLETION_COMPAT_DIR"); do
        i=$BASH_COMPLETION_COMPAT_DIR/$i
        [[ -f $i && -r $i ]] && . "$i"
    done
fi
1

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

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

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

В дополнение к посту Адама К. Джонсона

Вы также можете поставить следующее ...

# MacPorts Bash shell command completion
if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi

... в вашем /etc / профиле, если хотите.

Таким образом, все пользователи в системе получат выгоду от любых скриптов завершения bash, установленных в каталоге "/opt/local/etc/bash_completion.d/".

0

Хотя приведенный выше ответ от grundprinzip от 2011 года по-прежнему работает нормально, я хотел бы добавить более свежий ответ теперь, когда есть пакет bash-дополнения Homebrew (формула репо), который делает это еще проще. (Это включает в себя завершение для git, а также других распространенных инструментов.)

Сегодня macOS поставляется с Bash 3, но вы можете brew install bash Bash 4. Если вы работаете с Bash 4, установите более новую ветку 2.x bash-complete.

Баш 4

  1. Бежать:

    brew install bash-completion@2
    
  2. Добавить в ~/.bash_profile:

    if [ -f /usr/local/share/bash-completion/bash_completion ]; then
      . /usr/local/share/bash-completion/bash_completion
    fi
    

Баш 3

Если вы хотите придерживаться стандартной версии 3.x для MacOS, следуйте этим инструкциям.

  1. Бежать:

    brew install bash-completion
    
  2. Добавить в ~/.bash_profile:

    echo "[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion" >> ~/.bash_profile
    

Ссылка: http://davidalger.com/development/bash-completion-on-os-x-with-brew/

-2

Я думаю, что вы, возможно, забыли поиск файла в вашем .bashrc , вы можете добавить что-то вроде:

. ./path/to/your/file.ext

Использование . после пробела запускается файл в текущем контексте.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .