2013-08-16 41 views
10

Tôi đang gặp sự cố khi thi hành các móc Git trên Windows. Tôi có một repo trần và trong đó là "móc" thư mục tôi đặt sau đây vào cả "cập nhật" và "pre-đẩy" các file nhưng kịch bản PHP là không bao giờ được thực thi:Thi hành các móc Git trên Windows

"c:/Programs/PHP/php.exe" c:/Data/Scripts/git-pre-push.phpcli %1 

Bất kỳ ý tưởng là tại sao kịch bản PHP không được thực hiện?

Trong giao diện điều khiển cửa sổ Git tôi thấy sau khi tôi cố gắng đẩy một cái gì đó để repo trần:

POST git-receive-pack (437 bytes) 
remote: error: hook declined to update refs/heads/master 
To https://[email protected]/samplerepo 
! [remote rejected] master -> master (hook declined) 
error: failed to push some refs to 'https://[email protected]/samplerepo' 

... vì vậy tôi biết rằng "cập nhật" được bằng cách nào đó được thực thi. Khi tôi loại bỏ tập tin đó, công việc đẩy chỉ hoạt động tốt.

+0

Khi tôi đổi tên tệp móc thành tệp .bat và thực thi nó, mọi thứ hoạt động tốt! – TheStoryCoder

+0

Bạn đang đề cập đến tệp nào khi bạn nói "đã đổi tên tệp"? Bạn có móc thực hiện như bash, php, hoặc kịch bản hàng loạt? Chúng tôi có thể xem nội dung không? –

Trả lời

13

Theo mặc định, Git cho Windows thực hiện các kịch bản móc bằng cách sử dụng cổng Windows của riêng vỏ bash. Chắc chắn, một vỏ Unix không có ý tưởng về %1. Giả sử, Git cho Windows có thêm các bản hack để phát hiện các phần mở rộng tên tệp "phổ biến" — chẳng hạn như .bat — và thực hiện một tuyến đường thay thế trong trường hợp này.

Tôi nghĩ sửa chữa của bạn để chương trình riêng của mình là tốt nhất, nhưng cách tiếp cận khác sẽ phải viết lại kịch bản của bạn để đọc

#!/bin/sh 
c:/Programs/PHP/php.exe c:/Data/Scripts/git-pre-push.phpcli "[email protected]" 

(dòng công việc không có ý nghĩa đặc biệt thực trong môi trường Windows khác hơn là gợi ý tiếp theo người để chỉnh sửa kịch bản về ý nghĩa của nội dung của nó).

+5

'c: /' có thể là '/ c /' thay thế. –

+0

Tuyệt vời - bạn đã thực hiện một ngày của tôi! – TheStoryCoder

+0

Argh, nó chỉ hoạt động trên 'tiền cam kết'. Khi 'nhận trước' và 'cập nhật', nó chỉ nói những điều sau đây bất kể tôi viết gì: BÀI Git-nhận-gói (449 byte) Để https: // username @ mydomain/samplerepo ! [từ chối bị từ chối] master -> master (hook nhận trước bị từ chối) lỗi: không thể đẩy một số refs tới 'https: // username @ mydomain/samplerepo' – TheStoryCoder