4
4

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 3 years have passed since last update.

GitでPowerShellスクリプトファイルをhookする。

Posted at

プロジェクト運用上、
「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 を作ります。

pre-commit
#!/bin/sh
powershell.exe -Command "echo 手ミー、コミット!"

ワンラインであれば上記で十分ですが、今回はスクリプトファイルを作ったので、 .git/hooks/ の下の各ファイルの内容は以下のようになりました。

pre-commit
#!/bin/sh
powershell.exe -File ".git/hooks/check-csproj.ps1"
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年越しに遊べました。

4
4
1

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?