2012-02-18 100 views
5

我在我的.git /掛鉤以下/預提交文件PowerShell的混帳掛鉤退出代碼

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

這成功地執行在pre-commit-hook.ps1文件在同一目錄下的代碼,但沒有捕獲退出碼。根據tldp.org,如果僅指定退出,則將返回最後的退出代碼。如果退出代碼非零,Git掛鉤將失敗,但即使我的powershell腳本返回狀態碼1,它總是成功。我能做些什麼來捕獲PowerShell腳本中的退出代碼,以便鉤子能夠正常工作?

+0

在腳本中嘗試加入'[環境] ::退出(1)'返回給調用者的非零代碼。如果這項工作,我會讓我的答案:-) – 2012-02-18 03:04:28

+0

nope不起作用。我已經在我的腳本中只有'退出1',但這也沒有工作 – 2012-02-18 03:09:32

+0

我想你可能...因爲有時它[不起作用](http://stackoverflow.com/questions/8902004/powershell -fails到返回正確的退出碼/ 8902329#8902329)。 – 2012-02-18 03:14:52

回答

6

保持簡單的ps1腳本的調用,你應該有它的工作。對我來說,以下工作:

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

PS1的腳本只是有一個exit 1和承諾都沒有發生。

當你正在做的東西像-command,PowerShell是不知道的正常工作,你可能需要做一些像-command {& .\test.ps1; exit $lastexitcode}

+1

是的工作。我認爲這裏的關鍵是,即使「預先提交」本身已經在.git/hooks中運行,當前目錄也是您的項目的根目錄。這絕對不是在文檔中;) – 2012-02-18 03:40:08