Як змусити git-fill.bash працювати на Mac OS X?


92

Я дотримувався http://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live- без додавання 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]; тоді
    . / opt / local / etc / bash_completion
фі

або для MacPorts з версії 2.1.2 на Mountain Lion:

# MacPorts Bash команда оболонки завершення
якщо [-f /opt/local/etc/profile.d/bash_completion.sh]; тоді
  . /opt/local/etc/profile.d/bash_completion.sh
фі

або для MacPorts з новішими версіями git:

якщо [-f /opt/local/share/git-core/git-prompt.sh]; тоді
    . /opt/local/share/git-core/git-prompt.sh
фі

Примітка: bash_completion.sh потрібен bash 4.1 або вище. Якщо завершення не працює, спробуйте echo $BASH_VERSIONдізнатися, чи це проблема. Якщо так, введіть MacPorts bash, набравши bashі спробуйте завершити git ще раз.


Я просто копіюю вставлені, і я все ще отримую помилку, яку має ОП. = \. Як ви можете сказати, що було включено? Я не звертаюсь до ресурсів bash_completion
NullVoxPopuli

Зверніть увагу, що новіші версії git / macport / bash-fill підказка знаходяться в іншому файлі. Дивіться: 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_VERSION4.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 або пізнішої версії, ви можете слідувати вказівкам тут: apple.stackexchange.com/questions/70132/…
ThomasW

55

Якщо ви встановили git за допомогою домашньої мови, ніж ви могли б трохи скорегувати поради 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)")]\$ '

Для цього потрібно переконатися, що ваш локальний контейнер знаходиться в PATH, і sourceкоманда виконує завдання. Тоді, звичайно, зміна PS1 ставить в підказку поточну перевірену гілку.

Отже, не встановлюється MacPort, щоб потім встановити "завершувальну" версію GIT (особливо дратує, якщо ви її вже встановили).



1
Для тих, хто цікавиться, як поєднати цю річ з PS1 з кольорами у своєму запиті, дивіться: stackoverflow.com/questions/816790/…
Nickolay

1
Точніше, git-fill.bash просто повинен бути десь у вашому $PATH. Я вирішив поставити шахту, /usr/local/bin/щоб мені не довелося змінювати свої існуючі $PATH.
metavida

13

Незважаючи на те, що поточна відповідь правильна для старих MacPorts, є нова проблема з самими поточними MacPorts, що призводить до тієї ж помилки.

Поточний пакет базового завершення (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


Це найправильніша відповідь, оскільки у мене виникли проблеми лише після оновлення макпортів. Єдиним недоліком використання башти макпортів з терміналу є те, що він тепер попереджає мене про припинення запущених процесів, коли я намагаюся закрити вікно свого терміналу - ви натрапили на це?
vitch

6

Вам потрібно джерело функцій виконання команд. Додайте до свого .bashrc_profile перед PS1:

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


5

Прикро це знову було порушено. Цього разу це git люди з версією 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-портів мені потрібно було використовувати наступні рядки у своєму .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

Я використовую пивоваріння, тому головний 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>
r00m,

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 року до цього часу відмінно працює, я хотів би додати ще недавній відповідь зараз , що є тепер Homebrew пакет Баш-завершення ( формула , репо ) , що робить це ще простіше. (Сюди входить завершення роботи git, а також інші поширені інструменти.)

Сьогодні macOS постачається з Bash 3, але ви можете brew install bashотримати Bash 4. Якщо ви використовуєте Bash 4, то встановіть новішу 2.x гілку bash-завершення.

Баш 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

Якщо ви хочете дотримуватися запасів bash 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.