Powershell Git Hook Exit Code

I have the following in my .git/hooks/pre-commit file

#!/bin/sh
exec c:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy RemoteSigned -Command " Get-Location | % { '$_\pre-commit-hook.ps1'} | % { & $_ }"
exit

This successfully executes the code in the pre-commit-hook.ps1 file in the same directory, but does not capture the exit code. According to tldp.org the last exit code will be returned if only exit is specified. Git hooks will fail if the exit code is non-zero, but even though my powershell script returns a status code of 1, it always succeeds. What can I do to capture the exit code from the powershell script so the hook will function correctly?

  • Use emacsclient -t when committing in Git
  • git diff during pre-commit hook results in Not a git repository
  • Git hook, modify commit files
  • Delete all local git branches
  • How can you access an environment variable that has a space in its name in bash?
  • Git for Windows doesn't execute my .bashrc file
  • Git subtree: Use only subrepository instead of whole repository
  • setup git to ignore index.php in root folder only and not all index.php files in subfolders
  • How to checkout an old commit and make it a new commit
  • Create branch in remote repository without having local repository
  • How can I make git-status check two different remotes?
  • Cannot clone GIT repository on network drive
  • One Solution collect form web for “Powershell Git Hook Exit Code”

    Keep the invocation of the ps1 script simple and you should have it working. The following works for me:

    #!/bin/sh
    echo 
    exec powershell.exe -ExecutionPolicy RemoteSigned -File '.\.git\hooks\pre-commit-hook.ps1'
    exit
    

    The ps1 script just had an exit 1 and the commit did not happen.

    When you are doing stuff like -command, Powershell is not known to work properly and you might have to do something like -command {& .\test.ps1; exit $lastexitcode}

    Git Baby is a git and github fan, let's start git clone.