Gitの現在のブランチをプロンプトに表示するBash設定
はじめに
ターミナルで作業をしていると、どのブランチで作業しているのかを確認することがあるかと思います。
プロンプトに現在のブランチ名と作業状態を表示する方法をまとめましたので、紹介します。
設定方法
git-prompt.sh
をダウンロード
1. Gitには、プロンプトをカスタマイズするためのスクリプトが用意されています。
.bashrcがあるディレクトリで以下のコマンドを実行し、スクリプトをダウンロードしてください。
wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh
2. .bashrc に設定を追加
以下の内容を ~/.bashrc
に追記してください。
source ~/.git-prompt.sh
PROMPT_COMMAND='PS1="\[\033[1;32m\]\u\[\033[00m\]:\[\033[1;34m\]\w\[\033[1;31m\]$(__git_ps1)\[\033[00m\] \$ "'
3. 変更を反映
変更を反映するには、以下のコマンドを実行します。
source ~/.bashrc
この設定だと、以下のように表示されます。
user@host:~/repo (main) $
続いて、PS1の各要素について詳しく説明します。
PS1
の設定について
🔧PS1
とは、プロンプトをどのようにフォーマットして表示するかを定義する変数です。
🏷️ 各要素の意味
コード | 意味 | 表示される内容 |
---|---|---|
\u |
ユーザー名 | user |
\w |
カレントディレクトリ | ~/myproject |
$(__git_ps1) |
Gitブランチ情報 |
(main) , (feature-branch) など |
\$ |
ユーザー権限を示す | 一般ユーザ: $ , rootユーザ: #
|
\033[XXm
)
🎨 色設定 (この設定では、ユーザー名・カレントディレクトリ・Gitブランチ名 に色を付けています。
コード | 色 | 適用範囲 |
---|---|---|
\[\033[1;32m\] |
緑 | ユーザー名 (\u ) |
\[\033[1;34m\] |
青 | カレントディレクトリ (\w ) |
\[\033[1;31m\] |
赤 | Git ブランチ ($(__git_ps1) ) |
\[\033[00m\] |
デフォルト色に戻す | 次の文字に色が影響しないようリセット |
PS1
のフォーマットにはさまざまなオプションがあり、ここでは詳細を省略します。
興味がある方は、ぜひ調べてみてください(「bash PS1 カスタマイズ」などで検索すると情報が見つかります)。
3. Gitの状態をプロンプトに表示する
必須ではないですが、上記の設定に加え、以下の定数を追記することで、Gitの作業状態をプロンプトに表示できます。
GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWUPSTREAM="auto"
GIT_PS1_STATESEPARATOR="|"
GIT_PS1_SHOWCOLORHINTS=yes
GIT_PS1_SHOWCONFLICTSTATE=yes
GIT_PS1_HIDE_IF_PWD_IGNORED=yes
git-prompt.sh
で使用できる定数一覧
🔧定数 | 説明 | 設定値 | 設定しない場合のデフォルト動作 |
---|---|---|---|
GIT_PS1_SHOWDIRTYSTATE |
ワークツリーの変更状態 (* , + ) を表示 |
1 (有効) |
変更状態を表示しない |
GIT_PS1_SHOWSTASHSTATE |
git stash された変更の有無を表示 |
1 (有効) |
git stash の情報を表示しない |
GIT_PS1_SHOWUNTRACKEDFILES |
未追跡ファイル (% ) を表示 |
1 (有効) |
未追跡ファイルを表示しない |
GIT_PS1_SHOWUPSTREAM |
リモートとの差分 (< , > , <> , = ) を表示 |
"auto" , "verbose"
|
リモートとの差分を表示しない |
GIT_PS1_STATESEPARATOR |
状態を区切る記号を変更 |
"|" , " / " など |
スペースで区切られる |
GIT_PS1_SHOWCOLORHINTS |
Gitのブランチ名や状態を色付きで表示 |
yes (有効) |
色なしのプレーンな表示(PS1で色を指定している場合は、その色になります) |
GIT_PS1_SHOWCONFLICTSTATE |
CONFLICT を表示 |
yes (有効) |
コンフリクトの情報を表示しない |
GIT_PS1_HIDE_IF_PWD_IGNORED |
.gitignore で無視されている場合、Git情報を非表示にする |
yes (有効) |
.gitignore に関係なくGit情報を表示 |
📌GIT_PS1_SHOWDIRTYSTATE
ワークツリーに変更がある場合、その状態をプロンプトに表示します。
有効にする場合は、1を設定します。
-
*
→ 未ステージングの変更あり -
+
→ ステージング済みの変更あり
表示例:
user@host:~/repo (main *) $
user@host:~/repo (main *+) $
📌GIT_PS1_SHOWSTASHSTATE
git stash
に保存されている変更がある場合、$
を表示します。
表示例:
user@host:~/repo (main $) $
📌GIT_PS1_SHOWUNTRACKEDFILES
未追跡のファイルが存在する場合、%
を表示します。
表示例:
user@host:~/repo (main%) $
📌GIT_PS1_SHOWUPSTREAM
リモートとの差分を示します。
-
<
→ リモートより遅れている -
>
→ リモートより進んでいる -
<>
→ ローカルとリモートが分岐している -
=
→ ローカルとリモートが一致している
表示例(設定値をauto
にした場合):
user@host:~/repo (main <) $ # リモートより遅れている
user@host:~/repo (main >) $ # リモートより進んでいる
user@host:~/repo (main <>) $ # リモートとローカルで異なるコミットを持っている
user@host:~/repo (main =) $ # リモートと一致している
GIT_PS1_SHOWUPSTREAMの設定値についてですが、基本的には
auto
にしておけば問題ありません。
より詳細な設定(verbose
やname
など)については、別記事で解説予定です。
📌GIT_PS1_SHOWSTASHSTATE
git stash
に保存されている変更がある場合、$
を表示します。
表示例:
user@host:~/repo (main $) $
📌GIT_PS1_STATESEPARATOR
状態を区切る記号を "|"
や "/"
などに変更できます(デフォルトはスペース)。
表示例(設定値を"|"
にした場合):
user@host:~/repo (main|+) $
📌GIT_PS1_SHOWCOLORHINTS
Gitのブランチ名や状態情報を、Bashのカラースキームに基づいて色付きで表示します。
例えば、ブランチ名は緑、変更のある場合は赤、リモートとの差分がある場合は黄色など、直感的に状況が分かりやすくなります。
PS1でも色を指定できますが、両方を設定した場合、GIT_PS1_SHOWCOLORHINTSの方が優先されます。
📌GIT_PS1_SHOWCONFLICTSTATE
未解決のコンフリクトがある場合、CONFLICT
を表示します。
表示例:
user@host:~/repo (main CONFLICT) $
📌GIT_PS1_HIDE_IF_PWD_IGNORED
現在のディレクトリが .gitignore
により無視されている場合、プロンプトにGit情報を表示しないようにします。
これは、不要なディレクトリでのGit情報表示を防ぐのに役立ちます。
有効化後の動作:
-
.gitignore
に無視されているディレクトリでは、Gitブランチや状態が表示されなくなる -
.gitignore
の対象外のディレクトリでは、通常通りGit情報が表示される
まとめ
-
git-prompt.sh
を使うと プロンプトに現在のブランチと作業状況を表示 できる。 -
.bashrc
に設定を追加するだけで簡単に導入可能。
Discussion