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