Как заставить git-creation.bash работать на Mac OS X?


92

Я добавил http://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live-without, чтобы добавить git-completion.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.

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


Ответы:


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
if [-f / opt / local / etc / bash_completion]; тогда
    , / Опт / местные / и т.д. / bash_completion
фи

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

# Завершение команды оболочки MacPorts Bash
if [-f /opt/local/etc/profile.d/bash_completion.sh]; тогда
  , /opt/local/etc/profile.d/bash_completion.sh
фи

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

if [-f /opt/local/share/git-core/git-prompt.sh]; тогда
    , /opt/local/share/git-core/git-prompt.sh
фи

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


Я просто вставил копию, и я все еще получаю ошибку, которую имеет OP. знак равно Как вы говорите, что было включено? Я не знаю. Источник:
bash_completion

обратите внимание, что в более новых версиях git / macport / bash-creation приглашение находится в другом файле. Смотрите: trac.macports.org/ticket/36334 if [ -f /opt/local/share/git-core/git-prompt.sh ]; then . /opt/local/share/git-core/git-prompt.sh fi
Yehosef

3
Поскольку /opt/local/etc/profile.d/bash_completion.shтребуется $BASH_VERSIONверсия 4.1 или выше, мне пришлось сделать следующее на Mac OS X 10.8.3 с MacPorts 2.1.3: переключить оболочку входа Mac OS X со своей стандартной /bin/bashверсии (3.2.48 (1) -релиз) на MacPorts /opt/local/bin/bash(4.2) .42 (2) -релиз), как описано здесь: stackoverflow.com/a/791244/287984. В основномif [ `grep /opt/local/bin/bash /etc/shells` ]; then echo /opt/local/bin/bash | chsh -s /opt/local/bin/bash; else echo /opt/local/bin/bash | sudo tee -a /etc/shells; chsh -s /opt/local/bin/bash; fi
Уве Гюнтер,

Отлично сработало для меня. Пришлось заменить /bin/bashв Terminal.app на /opt/local/bin/bashиз macports + все .bash_profileпредложенные здесь изменения.
BGS

1
Чтобы перейти на bash 4.1 или более позднюю
версию,

55

Если вы установили мерзавец с помощью доморощенного , чем вы можете настроить совет 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

Для получения дополнительной информации __git_ps1см. Ответ superuser.com/a/477749/90231 в этом стеке.
RichVel

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

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

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



1
Для тех, кто интересуется, как объединить эту вещь PS1 с цветами в вашем приглашении, смотрите: stackoverflow.com/questions/816790/…
Nickolay

1
Точнее, git-creation.bash просто должен быть где-то в вашем $PATH. Я решил поставить мой /usr/local/bin/так, чтобы мне не пришлось изменять мои существующие $PATH.
Метавида

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


Это самый правильный ответ, так как у меня возникла проблема только после обновления macports. Единственный недостаток использования macports bash из терминала - это то, что теперь он предупреждает меня о завершении запущенных процессов, когда я пытаюсь закрыть окно терминала - вы сталкивались с этим?
vitch

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





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

Это был единственный ответ, который действительно работал для меня. Другие ответы git br<TAB>
приводили к

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

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

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