🐁
【Git】PowerShell をカスタマイズして作業中のブランチ名を表示しよう
はじめに
PowerShell で Git 操作を行う際に
「今自分がどのブランチで作業しているかわからない」
「作業中のブランチを git branch で確認する」
ということがあると思います。
こんな感じ ↓
カスタマイズ前
PowerShell の Profileを用いて、カスタマイズ ( ブランチ名の表示など ) を行うことで git branch せずとも作業ブランチ名が表示されるようになります。
こんな感じ ↓
カスタマイズ後
PowerShellプロファイルとは
- PowerShellセッション開始時に自動実行されるスクリプトファイル
- 個人のカスタム設定( エイリアス、関数、環境変数など )を保存する
プロファイルにエイリアス等を記述することで永続化!
プロファイルの確認
プロファイルが存在するか確認
Test-Path $PROFILE
プロファイルの作成
存在しない場合は以下で作成
if (!(Test-Path -Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
}
プロファイルの編集
作成されたプロファイルを編集
notepad $PROFILE
ブランチ名の表示
ブランチ名の取得
現在の Git ブランチ名を取得する関数を定義
function Get-GitBranch {
try {
# 現在のブランチ名を取得
$branch = git rev-parse --abbrev-ref HEAD 2>$null
if ($branch) {
return $branch.Trim()
}
} catch {
# Gitコマンドが失敗した場合、空文字列を返す
return ""
}
}
ブランチ名を表示
Prompt関数に最終的な処理を記述
# プロンプトのカスタマイズ
function Prompt {
# カレントディレクトリのパスを取得
$currentPath = Get-Location
# ブランチ名を取得
$branch = Get-GitBranch
# プロンプトを設定
"$currentPath ($branch)> "
}
整える
ディレクトリとブランチ名を角括弧で囲んでみる
function Prompt {
# カレントディレクトリのパスを取得
$currentPath = Get-Location
# ブランチ名を取得
$branch = Get-GitBranch
# プロンプトを設定
"[$currentPath][$branch] > "
}
色を付ける
function Prompt {
# カレントディレクトリのパスを取得
$currentPath = Get-Location
# ブランチ名を取得
$branch = Get-GitBranch
Write-Host "[" -NoNewline
Write-Host $currentPath -NoNewline -ForegroundColor Cyan
Write-Host "]" -NoNewline
if($branch){
Write-Host "[" -NoNewline
Write-Host $branch -NoNewline -ForegroundColor Magenta
Write-Host "]" -NoNewline
}
return " > "
}
おまけ
- タブ名をディレクトリにする
- 時刻を表示 ( 飾り程度
- 改行を加えて見やすくする
function Prompt {
# カレントディレクトリのパスを取得
$currentPath = Get-Location
# タイトルバーに現在のフォルダ名を表示
$Host.UI.RawUI.WindowTitle = Split-Path -Leaf $currentPath
# パス表示
Write-Host ""
Write-Host "[" -NoNewline
Write-Host $currentPath -NoNewline -ForegroundColor Cyan
Write-Host "]" -NoNewline
# ブランチ名を取得
$branch = Get-GitBranch
if ($branch) {
Write-Host "[" -NoNewline
Write-Host $branch -NoNewline -ForegroundColor Magenta
Write-Host "]" -NoNewline
}
# 現在の日時を表示
$now = Get-Date -Format "yyyy/MM/dd HH:mm"
Write-Host "`n$now"
return " > "
}
Discussion