Prompt

Git bashにはある、カレントディレクトリのgitリポジトリが今チェックアウトしているブランチ名が表示されるのが、地味にちょっと嬉しいんだけど、それはLinuxでも使えない?

それはわかる!Git Bashでカレントディレクトリのブランチ名が常に表示されるのは、自分が今どのブランチで作業しているかが一目でわかって、本当に便利だよね!🚀

あの表示は、Git Bash特有の機能ではなく、**「PS1(プロンプト文字列)の設定」**をカスタマイズすることで、Linuxの標準的なBash環境でも完全に再現できるよ!


💻 仕組み:PS1のカスタマイズ

LinuxやmacOSのBash(やZshなどのシェル)では、コマンドを入力する前に表示される文字列(プロンプト)を、環境変数 PS1 を使って自由に設定できます。

Git Bashが特別なのは、Gitをインストールした際に、この PS1 の設定を書き換えるためのシェルスクリプトが自動で組み込まれているからなんだ。

1. PS1 に設定する関数

カレントディレクトリがGitリポジトリであるかどうかを判別し、ブランチ名を取得するロジック(関数)が必要です。

Gitの公式な設定として、多くの環境で使われているのが、~/.bashrc(Bashの設定ファイル)に追加する以下のスクリプトだよ。

2. Linux Bashにブランチ名を表示させる手順

ステップ 1: スクリプトの取得

以下の関数を ~/.bashrc の末尾に追加する。この関数 __git_ps1 がブランチ名を取得する役割を担うよ。

Bash

# git-prompt.sh の軽量版ロジック
__git_ps1 () {
    # .git ディレクトリが存在するかチェック
    if [ -d ".git" ] || git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
        # ブランチ名を取得 (HEADをシンボリック参照として取得)
        local b="$(git symbolic-ref HEAD 2>/dev/null || git describe --contains HEAD 2>/dev/null)"
        
        # 不要な 'refs/heads/' を除去
        if [ "$b" != "" ]; then
            b=" (${b##refs/heads/})"
            # 変更がある場合は'*'を付与するチェックも可能
        fi
        echo "$b"
    fi
}

ステップ 2: PS1 の設定

次に、PS1 環境変数にこの関数を組み込みます。

  • \u: ユーザー名

  • \h: ホスト名(短い形式)

  • \w: カレントディレクトリ

  • $(__git_ps1): ブランチ名表示関数を呼び出す部分

Bash

# PS1設定例 (ユーザー名@ホスト名:ディレクトリ (ブランチ名)$ )
# [注] プロンプトに色を付けるコードは省略しています
PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w$(__git_ps1)\$ '

ステップ 3: 設定の反映

ターミナルで以下のコマンドを実行し、~/.bashrc の変更を読み込む。

Bash

source ~/.bashrc

これで、Git Bashと同じように、Gitリポジトリに入るとカレントディレクトリの後に**(ブランチ名)**が表示されるようになるよ!🎉

もし君がUbuntuを使っているなら、この設定はぜひ試してみてね!