2012-10-14 39 views
19

tôi đã tạo ra một rất đơn giản trước khi cam kết kịch bản: -Git pre-cam kết nối thất bại trong GitHub cho mac (hoạt động trên dòng lệnh)

#!/usr/bin/env sh 

# Run tests 
npm test 
if [ $? -ne 0 ]; then 
    echo "Tests failed. Aborting.." 
    exit 1 
fi 

exit 0 

Khi tôi chạy git commit tại dòng lệnh (với các bài kiểm tra không thành công), tôi nhận được lối ra dự kiến ​​1 với thông báo Tests failed. Aborting...

Tuy nhiên, Nếu tôi sử dụng GitHub cho Mac tuy nhiên tôi nhận được:

.git/hooks/pre-commit: line 5: npm: command not found 
Tests failed. Aborting.. 
(256) 

Tôi đoán nó xuống npm không được sẵn sàng cho môi trường thực thi mà GitHub cho Mac đang sử dụng, nhưng tôi đã được xé mái tóc của tôi ra cố gắng tìm cách khắc phục điều này.

Trả lời

22

Đã giải quyết. Như module nút cài đặt trên toàn cầu kết thúc dưới /usr/local/bin Tôi chỉ đơn giản là cần thiết để thêm dòng sau vào đầu trước khi cam kết của tôi:

PATH=$PATH:/usr/local/bin:/usr/local/sbin 

ví dụ phụ thêm cả /usr/local/bin/usr/local/sbin để PATH tại thời điểm thực hiện.

1

Biến $ PATH có sẵn trong môi trường GUI như Github Desktop và Sourcetree khác với biến có sẵn trong thiết bị đầu cuối. Theo mặc định, $ PATH có sẵn trong môi trường GUI không thể tìm thấy các mô-đun nút của bạn. Như đã nêu trong câu trả lời trước, bạn có thể đảm bảo rằng/usr/local/bin là trong đường dẫn bằng cách thêm

PATH=$PATH:/usr/local/bin:/usr/local/sbin 

Trong trường hợp của tôi điều này không làm việc vì tôi đang sử dụng Node Version Manager, mà các cửa hàng phiên bản khác nhau của Node và giúp bạn dễ dàng nâng cấp và chuyển đổi các phiên bản Node. Nó lưu trữ node_modules của bạn cho mỗi phiên bản của Node trong một tệp riêng biệt. Đây là mã tôi đã sử dụng để có được xung quanh vấn đề này:

#!/usr/bin/env bash 

PATH="/usr/local/bin:$PATH" 

if [ -f $HOME/.nvm/nvm.sh ] 
then 
    . $HOME/.nvm/nvm.sh 
    PATH="$HOME/.nvm/versions/node/$(nvm current)/bin:$PATH" 
fi 

kiểm tra này cho NVM, và nếu nó tồn tại, tải nó và sử dụng nó để tìm đường dẫn đến các module nút cho phiên bản hiện đang được sử dụng của Node. Nếu bạn chỉ đang cố gắng truy cập các mô đun nút và không cần phải nhận bất kỳ điều gì đặc biệt, bạn có thể bỏ qua việc thêm sbin folder, ví dụ: /usr/local/sbin

+0

"bạn có thể đảm bảo rằng/usr/local/bin nằm trong đường dẫn bằng cách thêm" - bằng cách thêm địa điểm? – sompylasar

+0

@sompylasar trong tập lệnh trước cam kết, tôi đã đăng ví dụ. Tôi đã sửa đổi kịch bản trong câu hỏi và đăng nó trong câu trả lời của tôi. Nó sửa đổi PATH dựa trên việc có hay không nvm có sẵn – RustyToms

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