Я выполнил шаги, приведенные в принятом ответе на этот вопрос - Prepend текущая ветка git в терминале . Но даже после добавления следующего кода в .bashrc
и перезагрузки ноутбука, я не вижу название ветви в терминале. Я что-то пропустил? Нужно ли как-то указывать в коде название корневой папки репо?
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
PS1="${debian_chroot:+($debian_chroot)}\u@\h:\w\$(parse_git_branch) $"
git branch
сообщит, только если текущий рабочий каталог является репозиторием, который Вы хотите отследить.
Например:
$> pwd
/home/xieerqi
$> git branch
fatal: Not a git repository (or any of the parent directories): .git
$> cd sergrep
$> git branch
* master
Вы хотите добавить a cd
звоните в ту функцию, которая перейдет к тому каталогу. Еще лучше поместите скобки вокруг той команды, так, чтобы команда была выполнена в подоболочке, таким образом, Ваш текущий рабочий каталог не затронут. Для меня функция может быть записана как так:
parse_git_branch(){
# navigate in sub shell to my git repository
# and execute git branch
( cd /home/xieerqi/sergrep; git branch 2> /dev/null | \
sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' )
}
И вот то, как это работает в действии:
DIR:/xieerqi|14:24|skolodya@ubuntu:
$ source ~/.mkshrc
DIR:/xieerqi|14:24|skolodya@ubuntu:
$ PS1="$(parse_git_branch)$PS1"
(master)DIR:/xieerqi|14:24|skolodya@ubuntu:
$ echo HELLO ASKUBUNTU
HELLO ASKUBUNTU
(master)DIR:/xieerqi|14:24|skolodya@ubuntu:
$
(master)DIR:/xieerqi|14:24|skolodya@ubuntu:
$ typeset -f parse_git_branch
parse_git_branch() {
( cd /home/xieerqi/sergrep
git branch 2>/dev/null | sed -e "/^[^*]/d" -e "s/* \\(.*\\)/(\\1)/" )
}