Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git completion and PS1 not working: "__git_ps1: command not found" on "sudo -s" or "sudo su" on Ubuntu 12.04

I installed git and git-flow completion adding these line to .bashrc of root and a normal_user on a Ubuntu 12.04 machine:

source /etc/git-completion.bash
source /etc/git-flow-completion.bash
GIT_PS1_SHOWUPSTREAM="verbose"
GIT_PS1_SHOWDIRTYSTATE=true
PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '

When I log as root or normal_user git completion works. However if I use "sudo -s" or "sudo su" git completion is not working and I continually get "__git_ps1: command not found" each time I press return. I tried to remove the "source" commands and use "apt-get install bash-completion" (bash-completion was already installed). So even without the 2 source I get the exact same behavior.

Anybody knows what the problem is and how to make it work?

like image 957
Chris Cinelli Avatar asked Jul 26 '12 05:07

Chris Cinelli


3 Answers

When you do sudo su it won't source the users .bashrc. The PS1 is inherited from the user you did the sudo su from but the new shell doesn't know where it can find ___git_ps1

You need to simulate a login by executing sudo su -l

like image 123
Peter van der Does Avatar answered Sep 28 '22 02:09

Peter van der Does


In your case it occurs because the git-prompt.sh file wasn't started at terminal start, it is possible to find contrib/completion/git-prompt.sh in the initial git-core files.

Probably already is present by the machine, for search:

find ~ -name git-prompt.sh

Can take a lot of time and consequently it is better to specify instead of / search more exact, probably you guess where it is possible to find. When will find, add to .bashrc before your promt change expression by an example as it was made by me with the indication of the ways:

if [ -f $HOME/git/1.8.0/contrib/completion/git-prompt.sh ]; then

. $HOME/git/1.8.0/contrib/completion/git-prompt.sh

fi

After all do:

. ~/.bashrc

like image 33
Aleksey Gorohov Avatar answered Sep 28 '22 02:09

Aleksey Gorohov


The prompt functionality was split out of git-completion.bash into git-prompt.sh on May 22, 2012; you will need to source that one as well. Git 1.7.12 was the first release to see this change. I just had the same issue when updating my git-completion.bash.

like image 28
Curtis Dunham Avatar answered Sep 28 '22 03:09

Curtis Dunham