10

gitとgit-flowcompletionをインストールして、これらの行をルートの.bashrcとUbuntu12.04マシンのnormal_userに追加しました。

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

rootまたはnormal_userとしてログに記録すると、gitの完了が機能します。ただし、「sudo-s」または「sudosu」を使用すると、gitの完了が機能せず、Returnキーを押すたびに「__ git_ps1:コマンドが見つかりません」というメッセージが表示され続けます。「source」コマンドを削除して「apt-getinstallbash-completion」を使用しようとしました(bash-completionはすでにインストールされています)。したがって、2つのソースがなくても、まったく同じ動作が得られます。

誰かが問題が何であるか、そしてそれをどのように機能させるかを知っていますか?

4

6 に答える 6

18

あなたがそうするとき、sudo suそれはユーザーを調達しません.bashrc。PS1は、元のユーザーから継承されますsudo suが、新しいシェルはどこにあるかわかりません___git_ps1

を実行してログインをシミュレートする必要がありますsudo su -l

于 2012-07-26T11:56:39.123 に答える
5

あなたの場合、それはgit-prompt.shファイルがターミナルの開始時に開始されなかったために発生しfind contrib/completion/git-prompt.shます。最初のgit-coreファイルで開始される可能性があります。

おそらく、検索のために、マシンによってすでに存在しています。

検索〜-name git-prompt.sh

時間がかかる可能性があるため、より正確に検索するのではなく、指定することをお勧めします。おそらく、どこで見つけることができるかを推測します。が見つかったら、promt change式の前に.bashrcを追加します。これは、方法を示して私が作成した例です。

if [-f $ HOME / git / 1.8.0 / contrib / complete / git-prompt.sh]; それから

。$ HOME / git / 1.8.0 / contrib / complete / git-prompt.sh

fi

結局のところ:

。〜/ .bashrc

于 2012-11-11T14:09:43.970 に答える
4

プロンプト機能は、2012年5月22日にgit-completion.bashからgit-prompt.shに分割されました。あなたもそれにする必要がありsourceます。Git 1.7.12は、この変更を確認した最初のリリースでした。git-completion.bashを更新するときに同じ問題が発生しました。

于 2013-05-30T20:18:34.237 に答える
4

root経由でログインしたときにgitが完了していなくても問題ないと仮定するsudo suと、評価を試みないようにするためのちょっとしたバッシュカンフー__git_ps1です。

プロンプト内に任意の種類の条件を配置できPS1ます(したがって、gitディレクトリにあるときにブランチ名で置き換えることができます)。rootしたがって、ユーザーID 0( )ではないことを条件付きチェックでgitのものをラップするだけです。

エクスポートPS1ステートメントで置き換えます。

$(__git_ps1) 

$(if [ $(id -u) -ne 0 ]; then echo  $(__git_ps1) ; fi)

OPにあるプロンプト全体は、次のようになります。

 PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(if [ $(id -u) -ne 0 ]; then echo  $(__git_ps1) ; fi)\[\033[00m\]\$ '

sudo suこれでシェルでエラーメッセージなしでできるはずです。

于 2017-02-28T00:58:43.627 に答える
0

のようなフラグを追加-lしたくない場合(またはsuなどのエイリアスを作成したくない場合)は、rootのbashrcを変更して使用しないようにすることもできます__git_ps1

たとえば、私の/root/.bashrc中には(ルートを赤にするのが好きです):

export PS1='\[\e[1;31m\][\u@\h \W]# \[\e[0m\]'

基本的にPS1は、~/.bashrcまたは類似のものをコピーして/root/.bashrc、__git_ps1への参照を削除します。

理想的には、rootとして開発を行うことはめったにないので、必要はありません__git_ps1。実行する場合(お勧めできません)、実行__git_ps1に必要なすべてのコードをにコピーできます/root/.bashrc

于 2015-10-05T16:50:43.487 に答える
-1

少し遅れるかもしれませんが、PS1で交換できます。

(__git_ps1)

(type -t __git_ps1 >& /dev/null && __git_ps1)

これにより、__ git_ps1が使用できない場合に呼び出しが無効になります。これは、スーパーユーザーとしてはおそらく必要ありません。

于 2015-03-04T17:40:16.490 に答える