調子にノって、gitを使う・・・(ブランチ名を表示したい)
今更ながら、gitですよ!
大昔にちょっと使ったんですが、一人で作って一人で遊ぶ分には、バージョン管理いらないかなと思ってしまって・・・バカでした(笑)
結局、OLDみたいなサフィックスがついたファイルが大量に作られていく。。。
この管理のほうが面倒になってきてしまった。
んで、やっぱり、要りますなバージョン管理・・・
というわけで、お家サーバにgitのリモートリポジトリを設定することにしました!
GitHubじゃないところはご愛嬌☆
すっかり、コマンド等も忘れてしまい、この機会にうろ覚えだったgitの仕組みも勉強しようかと・・・
で、実際にシェルで作業していると、ブランチ名が表示されていると嬉しいなと・・・
まあ、世の中にはそんな人は居ることは百も承知ですが・・・
かる〜く調べてみると
Ubuntuとかでgitをインストールすればbash用の__git_ps1関数も一緒に付いてくるらしいです。
でもこの関数は、ちょとリッチすぎました!書式を指定できたり、云々・・・
そんなに機能はいらないし・・・
まあ、なんだかんだで、車輪の再発明をしようではないですか!!
勉強がてら・・・
gitのブランチ名を取得する
まずは、gitのブランチ名を取得したいと思います!
gitのbranchコマンドを叩けば、ブランチの一覧が表示され、カレントのブランチ名の前には'*'が付加されています。
ここを取り出したいので、ここは、sedコマンドに登場していただきます・・・
ブランチ名の取得$ git branch --list
dev
* master
$ git branch --list|sed -ne 's/^\*\s*\(\.*\)/\1/p'
master
めでたく、取り出せました!
まあ、'\s'のあとの'*'は冗長かもしれませんが・・・
bashに設置する
bashに設置しようしとして、初めはsedの出力をそのまま使ってみたのですが・・・
そりゃそうでしょ、という結果に・・・
.bashrc(失敗)branch=$(git branch --list | sed -ne 's/^\*\s*\(\.*\)/\1/p')
PS1='\u@\h{$branch}:\w\$ '
そうです!変数に代入しちゃったので、ブランチを切り替えても、ブランチ名が切り替わりません!!
bashには便利な関数があるので、これを使いましょう!
関数を使えば、表示の度に評価されるようになります。
また、文字列を表示したいときは"echo"を使って、関数の位置に文字列を表示できます。
.bashrcgit_branch() {
branch=$(git branch --list 2>/dev/null | sed -ne 's/^\*\s*\(\.*\)/\1/p')
echo {$branch}
}
PS1='\u@\h$(git_branch):\w\$ '
これで、うまくいきます!!
ついでに、gitディレクトリでないときにエラーになるので、標準エラーは捨てておきましょう!( 2>/dev/null )
ブランチ名の表示テストuser-name@host-name:~/GitDir$ . ~/.bashrc
user-name@host-name{master}:~/GitDir$ git checkout dev
Switched to branch 'dev'
user-name@host-name{dev}:~/GitDir$ git checkout master
Switched to branch 'master'
user-name@host-name{master}:~/GitDir$
完成!!
まあ、結局色付けして、こうなりましたとさ・・・
.bashrc# git prompt
git_branch() {
branch=$(git branch 2>/dev/null | sed -ne 's/^\*\s*\(\.*\)/\1/p')
#[[ $branch ]] && echo "{$branch}"
echo ${branch:+\{$branch\}}
}
PS1='\[\033[01;32m\]\u@\h\[\033[00;33m\]$(git_branch)\[\033[00m\]:\[\033[01;34m\]\w\$ '
そうそう、"echo"で"-e"オプション付けてエスケープシーケンスの有効な色のついた文字列をPS1に取り込むと、コマンドラインの文字列の長さがおかしくなるよ!
とくに折り返してしまうような長いコマンドの後に、readlineで編集しづらくなる!
色指定のエスケープシーケンス部は "\[" 〜 "\]" で囲んで、文字列の長さがないように知らせる必要があるのだが、これはPS1の中だけで有効なので、色指定はPS1で行おう!
あと、${変数:+書式}みたいなのがあった!!
詳しくは、@t_nakayama0714さんが詳しく説明してくれています!
ありがとうございます☆
コメント
コメントを投稿