2012-03-28 32 views
9

Tôi gặp sự cố sau. Tôi đã cập nhật 'post-nhận' để cd vào một thư mục nào đó và sau đó kéo repo để triển khai nó như vậy:git post-receive không hoạt động chính xác

#!/bin/bash 
cd /var/www/site 
git pull origin master 

Tuy nhiên bất cứ khi nào tôi làm 'thầy đẩy nguồn gốc git' trên máy tính địa phương của tôi tôi nhận được như sau:

Counting objects: 5, done. 
Delta compression using up to 2 threads. 
(etc..) 
remote: fatal: Not a git repository: '.' 

Tuy nhiên, khi tôi tự cd để /var/www/site và làm git pull origin master nó hoạt động rực rỡ.

Trả lời

14

Sử dụng unset GIT_DIR như sau

#!/bin/bash 
cd /var/www/site || exit 
unset GIT_DIR 
git pull origin master 
exec git-update-server-info 

Bạn có thể xem thêm thông tin về GIT_DIR đây. Git Loves the Environment

+0

Brilliant, chỉ là những gì tôi cần. Bạn có nhớ giải thích lý do tại sao điều này cần phải được thực hiện? – andy

+2

'GIT_DIR' là một trong số ít các biến môi trường mà bạn có thể đặt cho các lệnh git khác nhau. Trong hook sau khi nhận, '$ GIT_DIR' luôn luôn (?) Được đặt thành' .'. Nếu bạn 'cd' ở nơi khác,' git pull' vẫn thấy '$ GIT_DIR' được đặt thành' .' và hy vọng tìm thấy repo trong '.', nhưng bạn đã di chuyển và nó không ở đó. Xóa nó ra làm cho git trở lại hành vi "bình thường" của nó (tìm trong './. Git', ở vị trí bạn' cd'-ed). – torek

2

Một tùy chọn khác là bạn có thể đề cập đến thư mục làm việc và thư mục git trong lệnh.

git --work-tree=/home/user/repos/my_app --git-dir=/home/user/repos/my_app/.git <command> 

ví dụ:

git --work-tree=/home/user/repos/my_app --git-dir=/home/user/repos/my_app/.git status 
Các vấn đề liên quan