В моем приглашении bash $ (__ git_ps1) говорит мне, что что-то не так, но что? - PullRequest
7 голосов
/ 05 сентября 2011

Я взломал приглашение bash (теоретически) сказать мне, в какой ветке git я сейчас нахожусь. Но вывод показывает, что что-то не так:

22:07 (seesaw|REBASE-i) infwb $git branch
* master
  wkg

Вот соответствующий код в моем файле .bash_profile (в конце этого вопроса я добавлю больший фрагмент):

PS1="$GRAY\$(date +%H:%M)\$(__git_ps1) $GREEN\W$YELLOW \$"

Как видите, $(__git_ps1) возвращает (seesaw|REBASE-i), хотя у меня больше нет ветвей качелей! (У меня он был, и у него была проблема с перебазированием по отношению к моей удаленной ветке качелей на github. Я решил проблему, я думаю, и git branch -r seesaw успешно удалил локальную копию.)

Я почти уверен, что (seesaw|REBASE-i) говорит мне, что что-то не так, но я не знаю, что это такое.

Спасибо за любые ваши предложения. (следует фрагмент .bash_profile)

-------from .bash_profile ---------

## ----- from http://en.newinstance.it/2010/05/23/git-autocompletion-and-enhanced-bash-prompt/
# Set git autocompletion and PS1 integration
if [ -f /usr/local/git/contrib/completion/git-completion.bash ]; then
  . /usr/local/git/contrib/completion/git-completion.bash
fi

if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi
## ----- end 

GRAY="\[\033[1;30m\]"
YELLOW="\[\033[1;33m\]"
GREEN="\[\033[0;32m\]"

PS1="$GRAY\$(date +%H:%M)\$(__git_ps1) $GREEN\W$YELLOW \$"

----------------

ДОПОЛНЕНИЕ

@ cdhowie и @manojlds, я впечатлен твоим знанием мерзавцев!

git rebase --abort вызвало изменение информации на (seesaw). К сожалению, я не могу найти rebase-merge (или .git) нигде на моем жестком диске. Я на Mac, который делает странные вещи со многими инструментами FOSS. (Я нашел сам git в / usr / local / git.) Ничего в / Library / Application Support или ~ // Library / Application Support, либо.

(еще позже)

Оказывается, все в порядке. Каким-то образом git rebase --abort вызвал повторное появление ветви качелей (я этого не ожидал!), И команда оставила меня с качелями в качестве текущей ветви. Оттуда я знал, что делать.

1 Ответ

4 голосов
/ 05 сентября 2011

Судя по комментариям @cdhowie, у меня возникло подозрение, что __git_ps1 по-другому обрабатывает сценарий git rebase.Поэтому я посмотрел на источник и нашел следующие строки:

...
if [ -f "$g/rebase-merge/interactive" ]; then
    r="|REBASE-i"
    b="$(cat "$g/rebase-merge/head-name")"
elif [ -d "$g/rebase-merge" ]; then
    r="|REBASE-m"
    b="$(cat "$g/rebase-merge/head-name")"
...

Так что, пока существует .git/rebase-merge, вы будете получать «неправильную» ветвь, даже если вы перешли на другую ветку.

git rebase --abort исправит это.Или удалите .git/rebase-merge

...