git 1.9.3 или новее: используйте __git_ps1
Git предоставляет скрипт оболочки с именем git-prompt.sh
, который включает в себя функцию, __git_ps1
которая
печатает текст для добавления в приглашение bash PS1 (включает имя ветви)
Его основное использование:
$ __git_ps1
(master)
Он также принимает необязательную строку формата:
$ __git_ps1 'git:[%s]'
git:[master]
Как его получить
Сначала скопируйте файл куда-нибудь (например ~/.git-prompt.sh
).
Вариант 1: использовать существующую копию в вашей файловой системе. Пример (Mac OS X 10.15):
$ find / -name 'git-prompt.sh' -type f -print -quit 2>/dev/null
/Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh
Вариант 2: вытащить скрипт из GitHub .
Затем добавьте следующую строку в ваш .bashrc/.zshrc
:
source ~/.git-prompt.sh
Наконец, измените ваш PS1
вызов __git_ps1
на подстановку команды:
Bash:
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
Zsh:
setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
мерзавец <1.9.3
Но обратите внимание, что только git 1.9.3 (май 2014) или более поздняя позволяет вам безопасно отображать название этой ветви (!)
См совершить 8976500 по Ричард Хансен ( richardhansen
) :
И bash, и zsh подвергают значение PS1 расширению параметров , подстановке команд и арифметическому расширению.
Вместо того, чтобы включать необработанное, неэкранированное имя ветви PS1
при работе в режиме с двумя или тремя аргументами, создайте PS1
ссылку на переменную, которая содержит имя ветви.
Поскольку оболочки не раскрываются рекурсивно, это позволяет избежать выполнения произвольного кода с помощью специально созданных имен веток, таких как
'$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)'.
Какой хитрый ум назвал бы такую ветку? ;) ( Рядом с мамой как в xkcd )
Больше примеров
still_dreaming_1 сообщает в комментариях :
Похоже, это отлично работает, если вы хотите цветную подсказку с xterm
(по моему .bashrc
):
PS1='\[\e]0;\u@\h: \w\a\]\n${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ '
Все другого цвета, включая ветку.
В Linux Mint 17.3 Cinnamon 64-bit:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00m\]$(__git_ps1) \$ '