Is it possible to run PowerShell scripts as git hooks?
I am running git in a PowerShell prompt, which shouldn't make any difference, but I can't seem to get them to work, as the hooks are named without extensions, and PowerShell needs (AFAIK) the .ps1 extension. I am not sure if that is the issue, or something else.
The "common" recommendation for command-line git on Windows is to use the "git-bash" shell. However, git works nicely from the Windows PowerShell with one small addition...
Version 6 of PowerShell has gone cross-platform! That means you can run PowerShell on both Windows and Linux. Commonly referred to as PowerShell Core, version 6 is built on top of the . NET Core Runtime 2.0 and is completely open-source.
It turns out all you need to make a Git hook is an executable script in the Git hooks directory. By default (assuming you are in a Git repo) this is . git/hooks .
You can embed PowerShell script directly inside the hook file. Here is an example of a pre-commit
hook I've used:
#!/usr/bin/env pwsh # Verify user's Git config has appropriate email address if ($env:GIT_AUTHOR_EMAIL -notmatch '@(non\.)?acme\.com$') { Write-Warning "Your Git email address '$env:GIT_AUTHOR_EMAIL' is not configured correctly." Write-Warning "It should end with '@acme.com' or '@non.acme.com'." Write-Warning "Use the command: 'git config --global user.email <[email protected]>' to set it correctly." exit 1 } exit 0
This example requires PowerShell Core but as a result it will run cross-platform (assuming this file has been chmod +x on Linux/macOS).
Rename pre-commit.sample to pre-commit in hooks folder. Then make pre-commit.ps1 powershell script file in same folder.
#!/bin/sh c:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy RemoteSigned -File '.git\hooks\pre-commit.ps1'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With