0
0

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 1 year has passed since last update.

【Git】git checkout <branch> を打つのがめんどくさい

Posted at

頻繁にGitコマンドを使用しているなら、ブランチ名やコマンドのTab補完が利用できないことは、少々不便だと感じることでしょう。

特に、新しいブランチを切り替えるたびに、その名前を完全にタイプする必要があるのは面倒です。

この記事では、そのような不便を解消する方法を具体的に紹介します。

目次

  1. 必要なファイル群をダウンロード
  2. .zshrcファイルに設定項目を追加
  3. オリジナルのプロンプトデザインを作成
  4. ハマったこと
  5. 参考文献

必要なファイル群をダウンロード

初めに、必要なファイル群をダウンロードします。

mkdir ~/.zsh
cd ~/.zsh
curl -o git-prompt.sh https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh
curl -o git-completion.bash https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
curl -o _git https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh

.zshrcファイルに設定項目を追加

次に、.zshrcファイルに設定を追加します。

# ~/.zsh/git-prompt.sh をソースファイルとして読み込む
source ~/.zsh/git-prompt.sh

# fpathに~/.zshディレクトリを追加
fpath=(~/.zsh $fpath)

# Gitのコマンド補完スクリプトの場所を指定
zstyle ':completion:*:*:git:*' script ~/.zsh/git-completion.bash

# zshのコマンド補完を初期化
autoload -Uz compinit && compinit -u

# Gitのプロンプトに変更がある場合に表示する設定
GIT_PS1_SHOWDIRTYSTATE=true

# プロンプトの文字列が実行時に評価されるように設定
setopt PROMPT_SUBST

オリジナルのプロンプトデザインを作成

続いて、好みのプロンプトを設計します。ここでは、カレントディレクトリとGitブランチ名を表示する例を示します。

# git_prompt関数を定義。現在のGitブランチ名を取得して、それをプロンプトに表示するための文字列を返す。
git_prompt() {
    # __git_ps1はGitのプロンプトスクリプトによって提供される関数。"%s"を渡すと現在のブランチ名のみを返す。
    local branch_name="$(__git_ps1 "%s")"

    # ブランチ名が空でない場合(Gitリポジトリ内である場合)、" on [ブランチ名]"という形式の文字列をechoする。
    if [[ -n $branch_name ]]; then
        echo " on $branch_name"
    else
        # Gitリポジトリ外である場合は、空の文字列をechoする。
        echo " "
    fi
}

# プロンプトの見た目を設定。カレントディレクトリをシアン色で、git_prompt関数の結果(ブランチ名)を赤色で表示する。
PS1='%F{cyan}%~%f%F{red}$(git_prompt)%f\$ '

結果はこんな感じ。

スクリーンショット 2023-10-26 7.16.18.png

ちゃんとブランチの補完も効いてて使いやすい。

スクリーンショット 2023-10-26 7.16.30.png

ハマったこと

プロンプトのカスタマイズ中に、ある問題が発生。

__git_ps1というgit-prompt.shで定義されている関数を使用している時、これが過去に作成したエイリアスと競合してしまいました。具体的には以下のようなエイリアスが原因でした。

alias test="some process sample_test.out"

このエイリアスにより、以下のようなエラーメッセージが表示されていました。

dyld[58984]: Symbol not found: __ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13get_allocatorEv                                                                                                 
  Referenced from: <EE118444-4D57-3565-AE96-6323D4C54F0A> /usr/local/bin/sample_test.out
  Expected in:     <3F5CB4D5-26D1-3E43-B241-2688FF0A67BD> /usr/lib/libstdc++.6.dylib
dyld[58985

参考文献

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?