11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

今いるディレクトリの git のブランチ名をプロンプトに表示する

Last updated at Posted at 2014-07-26

プロンプトって?

プロンプトとは Linux 等のターミナル上で

$

だとか

user@host $
irb(main):001:0>

みたいな感じで表示されている「ココにコマンド打てますよ」のサインの事.
bashでは PS1 変数に「どう表示させるか」の情報が格納されていて、自分で変更する事が可能

__git_ps1 関数

git にはそのプロンプトの表示を便利にするための関数が詰まった git-prompt.sh というファイルがある.
そのファイルを読み込むと

$ __git_1

とすると今の git のブランチ名が表示される関数等が使えるようになる.

読み込んで設定する

git-prompt.sh の場所はインストールした状況等によって変わるから各自に探してもらうとして、設定自体は至極簡単.

# bashrc とか bash_profile とか
. /path/to/git-prompt.sh
export PS1='\u@\h [\W $(__git_ps1)] \$ '

これで終了.

git-prompt.shが無い環境でエラーを出さないようにする

複数の環境で .bashrc を使いまわしてると「この環境ではあるけどあの環境では無い」なんて事がよくある.
一々「git-prompt.shがある版とない版」を分けてアップしたりするのは当然面倒でなので1つのファイルである場合と無い場合の両方に対応したい.

あと, 「git-prompt.sh の有無で PS1 に代入する値を変える」という手法は似たような事が増えた時にねずみ算的に記述が増えていくので PS1 もできれば固定させたい.

って事で自分は以下のように設定する事で対処している.

# Load Git Completions
gitps1="true"
GIT_CONTRIB_DIR=/opt/git/contrib
if [ -r ${GIT_CONTRIB_DIR}/completion/git-prompt.sh ]; then
  . ${GIT_CONTRIB_DIR}/completion/git-prompt.sh
  gitps1="__git_ps1"
fi

# Prompt
export PS1='\u@\h [\W $(${gitps1})] \$ '

ポイントとしては「直接 __git_ps1 を指定するのではなく,一度変数に格納してから $() の構文で呼び出す」ところ
bash には true コマンドというのが組み込まれていて,実行しても何も起こらない人畜無害なコマンドなので git-prompt.sh が無かった場合は何も表示されず,またエラーも起きないようになっている.

注意して欲しいのは GIT_CONTRIB_DIR の値は人によって変わるという点.
OS というか パッケージマネージャー (yum, apt-get, brew, port等) によってどこにインストールされるか変わるので
GIT_CONTRIB_DIRの値 と ${GIT_CONTRIB_DIR}/completion/git-prompt.sh の部分は自分の設定に合わせて適宜変えて下さいな.
最近,自分は git に関してはソースコードから自前でコンパイルするようにしていたりするのでパッケージでインストールした場合,どこに設置されるかは正直知らなかったりする. (確か /usr/share/ とか /usr/etc とかにできたような気もするけど・・・)

今,yumでインストールしてた自分のCentOSのサーバーで確認したら /usr/share/doc/git-1.7.1 に contrib ディレクトリがあった.まぁそんな感じの場所にインストールされるはず.
多分下のコマンド叩けば見つかるんじゃないかな?

find /usr/share -name '*completion*' | grep git
find /usr/share -name '*contrib*' | grep git

逆に,ソースコードからコンパイルした場合は /usr/local/src/git にソースを置いたと仮定すると

GIT_CONTRIB_DIR=/usr/local/src/git/contrib

となる.自分は /usr/local/src/git/contrib とするのがなんだか格好悪いって理由だけで /opt/git/contrib にシンボリックリンクを貼ってたりする←

とかなんとか行ってドヤ顔して終わろうと思ってたのに,調べたらバージョンとかによってロードのされ方が違ったりするみたい...
きちんと検証せな・・・

11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?