2011-01-24 41 views
5

Tôi mới dùng cả git lẫn unix nên hãy chịu đựng. Tôi đang cố gắng để tạo ra một móc git sau khi nhận đơn giản trong một kho tôi đã thiết lập trên ec2. Trong thư mục hooks, tôi có một tệp có tên là post-receive để cố gắng cập nhật thư mục làm việc của một site công cộng.Hiểu móc git cơ bản

#!/bin/sh 

echo 'hi git' 
cd /home/www-data/web2py/applications/init 
sudo git checkout . 
sudo git pull 
echo 'done' 

Nhưng sau khi đẩy, không có gì xảy ra. Thư mục làm việc của trang web không được cập nhật và khi tôi chạy git log, không có dấu hiệu lỗi hoặc câu lệnh echo của tôi. Tôi đoán tôi đang thiếu một cái gì đó? Cảm ơn.

+1

Tôi nghĩ bạn muốn 'git fetch' thay vì' git pull', vì pull cố gắng hợp nhất đầu vào với đầu địa phương mới hơn, trong khi tìm nạp chỉ nhận được các thay đổi mới. – Rudi

+0

@Rudi Bạn có thể mở rộng về điều này, có lẽ với một số ví dụ? Tôi đã sử dụng git pull và dường như đang hoạt động theo cách tôi muốn - chúng tôi đẩy các thay đổi của mình và trang web công khai được cập nhật tự động - nhưng tôi vẫn chưa sử dụng lệnh git fetch hoặc git ở bất kỳ biểu mẫu nào , vì vậy tôi không hiểu rõ về các vấn đề liên quan. Tôi là một phần của nhóm hai người và về cơ bản chúng tôi sử dụng git như branchless-svn-with-hooks cho đến nay và đã hài lòng với quy trình làm việc này, nhưng tôi rất cởi mở và quan tâm đến việc tận dụng lợi thế của git, nhưng tôi vẫn không thực sự lúng túng từ vựng. Cảm ơn. – Dane

+0

git pull cố gắng hợp nhất các thay đổi cục bộ với nội dung mới. Miễn là không có nơi nào cam kết trong thư mục webside, điều này không có vấn đề gì. Nhưng khi ai đó cam kết ở đó, sau đó kéo tiếp theo sẽ cố gắng hợp nhất các thay đổi đến với cam kết cục bộ. Khi hợp nhất này không thành công do xung đột, thì thư mục còn lại trong trạng thái có dấu xung đột trong mọi tệp xung đột, có thể không phải là những gì bạn muốn. – Rudi

Trả lời

4

Đầu tiên: nhật ký git không phải là nhật ký của git nhị phân. :) Nó được sử dụng để xem các cam kết và sửa đổi của họ.

Bạn có thấy đầu ra "hi git" và "done" ở đâu đó không? Tôi đoán là móc của bạn không thực thi được. Chạy chmod +x your_hook - Điều này sẽ làm cho nó thực thi.

+0

Bingo. Cảm ơn rất nhiều. – Dane