2012-02-18 37 views
5

Tôi có sau trong .git tôi/móc/file pre-camPowershell Git Mã Hook Thoát

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

này thực hiện thành công mã trong pre-commit-hook.ps1 tập tin trong thư mục tương tự, nhưng không nắm bắt được lối ra mã. Theo tldp.org mã thoát cuối cùng sẽ được trả lại nếu chỉ có lối ra được chỉ định. Git hooks sẽ thất bại nếu mã thoát không khác, nhưng mặc dù kịch bản PowerShell của tôi trả về mã trạng thái là 1, nhưng nó luôn thành công. Tôi có thể làm gì để nắm bắt mã thoát khỏi tập lệnh PowerShell nên móc sẽ hoạt động chính xác?

+0

Trong kịch bản thử của bạn thêm '[môi trường] :: Exit (1)' để trả lại mã không khác cho người gọi. Nếu điều này làm việc tôi sẽ làm cho nó câu trả lời của tôi :-) –

+0

nope không hoạt động. Tôi đã có chỉ 'thoát 1' trong kịch bản của tôi nhưng điều đó đã không làm việc hoặc –

+0

Tôi figured bạn có thể ... Bởi vì đôi khi nó [không hoạt động] (http://stackoverflow.com/questions/8902004/powershell -fails-to-return-proper-exit-code/8902329 # 8902329). –

Trả lời

6

Giữ lời gọi của tập lệnh ps1 đơn giản và bạn nên làm việc đó. Các công trình sau đây cho tôi:

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

Tập lệnh ps1 chỉ có exit 1 và cam kết không xảy ra.

Khi bạn đang làm những thứ như thế -command, Powershell không biết đến hoạt động đúng và bạn có thể phải làm một cái gì đó giống như -command {& .\test.ps1; exit $lastexitcode}

+1

Yup hoạt động. Tôi nghĩ rằng chìa khóa ở đây là mặc dù "pre-cam kết" chính nó đã được chạy trong .git/hooks, thư mục hiện tại là gốc của dự án của bạn. Điều đó chắc chắn KHÔNG có trong tài liệu;) –

Các vấn đề liên quan