プロジェクト運用上、
「Visual Studioで開発を行っているが、開発環境ごとに csproj
の内容を変えている(IISの設定)」
ので、ごく個人的にはリーダーさんがスムーズにプロジェクトファイルを開いて動作確認していただきたく、PowerShellで、
「自分の環境で csproj
を開くために行った編集を間違えてコミットしないように、 csproj
の中身を確認する」
だけのスクリプトを書いたので、そのメモ。
.git/info/exclude
に *.csproj
を突っ込むだけでいいのでは?
Visual Studioで追加・削除したファイルの管理は行いたいので、今回はこうしました。
Git Hooks
公式ドキュメントはもちろん、Qiitaでもこれの使い方はたくさん出てくるので、割愛。
Gitで何かコミットやコミットログを編集するようなコマンドを叩いた時に、Git Bashでスクリプトを動かして、チェック機能などを付加できるものだという雑理解でいいんでないかと。
Git BashでPowerShellのスクリプトを動かす方法。
今回はコミットを行う直前にチェックしたかったので、 .git/hooks/pre-commit
を作ります。
#!/bin/sh
powershell.exe -Command "echo 手ミー、コミット!"
ワンラインであれば上記で十分ですが、今回はスクリプトファイルを作ったので、 .git/hooks/
の下の各ファイルの内容は以下のようになりました。
#!/bin/sh
powershell.exe -File ".git/hooks/check-csproj.ps1"
# csproj の中身はxmlなので、XMLオブジェクトに変換して取り込む
# 気を付ける点としては、スクリプトファイルの存在するディレクトリからではなく、
# Git管理下ディレクトリの直下からのパスを指定すること。
$proj_xml = [xml](Get-Content "src/Tale.proj")
if ($proj_xml.Project.ProjectExtension.VisualStudio.FlavorProperties.WebProjectProperties.IISUrl -ceq "http://localhost/")
{
#IISUrlプロパティの中身が "http://localhost/" 決め打ち
Write-Host "ニャハハ! 片付けバッチリだな!"
exit 0
} else {
#IISUrlプロパティがそもそもなかったり、 "http://localhost/" 以外が割り当てられていた場合
Write-Host "ぬわぁぁぁぁぁっ! 貴様、csprojを汚すな!"
exit 1
}
上記 check-csproj.ps1
のコメントアウトでも書いた通り、スクリプトファイルからの相対パスではなく、Git管理下ディレクトリ(フォルダ)からの相対パスで、各ファイルを呼びだします。
参考資料
P.S. スクリプト内の文字列について
UndertaleというRPGのキャラクターのセリフっぽくしました。
最近のLinux版SteamでもProtonを強制有効化すると遊べます。
おかげで姉に誕生日プレゼントで買ってもらったこのゲームを3年越しに遊べました。