このLinuxのトリックで、常に自分がどのGitブランチにいるかを把握しよう
重要なポイント
- Gitでブランチを扱うことは迅速で簡単であり、良い作業習慣として頻繁に行うよう推奨されています。
- それは非常に些細なプロセスなので、ブランチの変更は常に頭に残るわけではありません。
- コマンドプロンプトを変更して自分の現在のGitブランチを自動的に表示させれば、常に自分がどのブランチにいるかを知ることができます。
Gitでブランチを使うのはとても簡単なので、私たちは頻繁に行っています。あまりにも頻繁に行うので、自分の現在のブランチを把握するのは簡単ではありません。このトリックを使えば、自分の現在のブランチを決して忘れないでしょう。
Gitブランチの管理
ブランチはバージョン管理において非常に重要です。これにより、メインのソースコードブランチに影響を与えることなく、新しい機能や既存のコードの変更に取り組むことができます。
Gitでのブランチ操作は、他のバージョン管理ソフトウェアに比べて非常に簡単です。新しいブランチを作成したり、ブランチを切り替えたりするプロセスは非常に軽量で、一瞬で行われます。そして、これが非常に速くて簡単なため、開発者はこれを頻繁に行う傾向があります。
それはほぼ簡単すぎる。Gitはブランチを変更することを些細なことにするので、ディレクトリを変更するかのように無意識に行うことができる。しかし、自分がどのブランチにいるかを意識することは非常に重要だ。
このトリックは、現在のGitブランチをBashコマンドプロンプトに表示するのに役立ちます。そして、素晴らしい部分は、現在のディレクトリにGitリポジトリが含まれていない場合、通常のコマンドプロンプトが表示されることです。
Gitブランチを文字列として取得する
これが機能するためには、現在のGitブランチをコマンドプロンプトに挿入するテキストの文字列として取得できる必要があります。それでは、リポジトリ内のブランチをリストするための標準的なGitコマンドを発行しましょう。
git branchこれはリポジトリ内のすべてのブランチのリストです。現在のブランチであるsaved-gameは、アスタリスクでフラグ付けされています。便利なことに、アスタリスクが付いているのはこの一行だけです。つまり、gitコマンドの出力をsedにパイプし、sedコマンドのストリーム操作機能を使用してアスタリスクのない行を削除できます。残る一行に対して、sedを使用してアスタリスクとスペースを削除できます。
git branch | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'それは現在のブランチの名前を教えてくれます。これを行うにはより簡単な方法もありますが、完全性のために、このコマンドの動作を説明します。
標準のgitブランチコマンドを発行します。
git branch出力はsedにパイプされます。2つのsed表現があります。最初の表現は、アスタリスクを含まない行を削除します。
-e '/^[^*]/d'2番目の式は、残りの1行から先頭のアスタリスクとスペースを取り除きます。
-e 's/* \(.*\)/\1/'それは機能しますが、誰もが sed に慣れているわけでも快適に感じているわけでもありません。6か月後にこれを見ると、それは理解できる可能性がありますか?私たちは git と Bash を活用して、よりシンプルな方法を考案できます。
Bashの&&演算子を使用すると、コマンドを連結して順次実行することができます。チェーン内のコマンドを実行するためには、前のコマンドが成功裏に完了する必要があります。これを利用する方法を見ていきましょう。
私たちに有利に働いているもう一つの点は、バージョン2.2以降、git branchコマンドに--show-currentというオプションが追加されたことです。これにより、現在のブランチの名前を単独で表示できます。
git branch --show-current現在のGitブランチの装飾されていない名前を取得するための簡単な方法です。ただし、現在のディレクトリにGitリポジトリが含まれていない場合にはエラーメッセージが生成されるという問題があります。したがって、Gitリポジトリにいない場合はコマンドが実行されないようにする必要があります。
git statusというgitコマンドがあります。これはGitリポジトリの状態を報告します。もしコマンドが失敗した場合、報告するリポジトリがないときのように、終了値は128になります。
git status
echo $?リポジトリのあるディレクトリでは、その終了値はゼロです。
git status
echo $?このコマンドと私たちのgitブランチコマンドをチェーンすることができ、gitステータスコマンドがゼロを返す場合にのみgitブランチコマンドが実行されるようになります。もう一つ行うことは、gitステータスコマンドからのすべての画面出力を/dev/nullにリダイレクトすることです。これは、送られたものを静かに消費する疑似ファイルです。
git status &> /dev/null && echo " $(git branch --show-current)"
cd taf
git status &> /dev/null && echo " $(git branch --show-current)"
私たちはgit statusコマンドからのすべての出力を抑制しました。これは私たちが必要としていたものです。リポジトリを含まないディレクトリ内では、画面出力はありません。リポジトリを含むディレクトリ内では、現在のブランチの名前が表示されます。
gitブランチコマンドに現在のブランチ名をそのままターミナルウィンドウに書き込ませることもできますが、echoコマンドで囲むことで先頭にスペースを含めることができます。このスペースは、コマンドプロンプトでブランチ名とディレクトリ名を分ける役割を果たし、一目で見やすくなります。
Bashプロンプトに文字列を追加する
現在のGitブランチの名前を取得し、それを画面に先頭にスペースを付けてフォーマットして出力する方法があります。これをコマンドプロンプトに組み込みましょう。
これまでに作成したコマンドを保持するための関数を作成し、その関数をコマンドプロンプトの定義内から呼び出します。コマンドプロンプトが表示されるたびに、私たちの関数が呼ばれます。
Bashでは、コマンドプロンプトの定義は通常(ただし常にではない).bashrcファイルにあります。これは、あなたのホームディレクトリにある隠しシステムファイルです。
お気に入りのエディタを使って.bashrcファイルを編集してください。
コマンドプロンプトを定義している行を探してください。それは通常次のように始まります:
PS1=このUbuntuコンピュータで、私たちが求める行は次のとおりです:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ 'この下には別の「PS1=」の行がありますが、それはずっと短いです。if-thenブロックで何が起こっているかを読むと、一つはカラー表示用のプロンプトで、もう一つはモノクロ用のプロンプトだということがわかります。もしGitを使っているなら、あなたはコーダーです。どのプロンプトが作業する必要があるものかすぐに見つけられるようになるでしょう。
私たちはif-thenブロックの上に私たちの関数を追加します。私はそれをget_git_branchと呼んでいます。
それは私たちがコマンドラインで使用したのと同じコマンドを含んでいます。今、コマンドプロンプトの定義からどこで関数を呼び出すかを決定する必要があります。
これはプロンプト定義の終わりです。
\w\[\033[00m\]\$ 'これはどのように作られているかです。
\wこれは、コマンドプロンプトが表示されるときに作業ディレクトリで置き換えられるトークンです。
\[\033[00m\]これはASCIIカラコードです。テキストの色を白に戻し、プロンプト内のドルマーク「$」が白いテキストで表示されるようにします。
\$ 'これはドル記号を表示し、その後にスペースを挿入して、コマンドプロンプトの定義を単一引用符で閉じます。
私たちは「\w」トークンの直後に関数を呼び出します。また、Gitの現在のブランチを際立たせるために、それを黄色で表示するためのカラーコードも挿入します。これが挿入するテキストです。
\[\033[01;33m\]$(get_git_branch)挿入したテキストにはスペースがありません。このように、私たちの追加を含む完全なコマンドプロンプトの様子です。
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;33m\]$(get_git_branch)\[\033[00m\]\$ '変更を保存してエディタを閉じてください。ターミナルウィンドウを閉じ、新しいターミナルウィンドウを開きます。通常のコマンドプロンプトが表示されます。Gitリポジトリを含むディレクトリに移動してください。
pwd
cd taf現在のGitブランチの名前は黄色で表示されます。異なるブランチをチェックアウトすると、コマンドプロンプトがすぐに変更されます。
git checkout timed-eventsこれはGitだけのためではありません
この方法を使って、コマンドラインツールで収集できるあらゆる情報を表示することができます。
例えば、この関数を作成し、get_git_branchを呼び出すのではなく、プロンプトから呼び出すと、プロンプトで時間を見ることができます。
get_time() {
echo " $(date +%r)"
}











