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)")]\$ '
git <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 Коричневий 64-розрядний:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00m\]$(__git_ps1) \$ '