Git - hook post-receive với git pull, Không thể tìm thấy thư mục git hợp lệ.


17

Điều này rất kỳ lạ nhưng khi thiết lập kho lưu trữ git và tạo một hook post-receive với:

echo "--initializing hook--"
cd ~/websites/testing
echo "--prepare update--"
git pull
echo "--update completed--"

hook thực sự chạy, nhưng nó không bao giờ quản lý để chạy git pull đúng cách:

6bfa32c..71c3d2a  master -> master
--initializing hook--
--prepare update--
fatal: Not a git repository: '.'
Failed to find a valid git directory.
--update completed--

Vì vậy, bây giờ tôi đang tự hỏi mình, làm thế nào có thể làm cho hook cập nhật bản sao với nhận sau?

trong trường hợp này, người dùng chạy các tiến trình là như nhau và mọi thứ trong thư mục người dùng vì vậy tôi thực sự không hiểu ... bởi vì nếu tôi đi vào bằng tay

cd ~/websites/testing
git pull

nó hoạt động mà không có vấn đề gì ...

bất kỳ trợ giúp về điều đó sẽ được khá nhiều đánh giá cao

Cảm ơn rất nhiều

Câu trả lời:


25

Trong khi hook đang chạy GIT_DIRvà (nếu worktree được xác định rõ ràng) GIT_WORK_TREEđược đặt. Điều đó có nghĩa là pull của bạn sẽ không chạy với kho lưu trữ thứ hai trong thư mục bạn đã thay đổi.

Hãy thử git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull; hoặc bỏ đặt môi trường repo-local của git với điều này:

unset $(git rev-parse --local-env-vars)

Thông tin thêm về các biến môi trường trong man 1 git .


1
Cảm ơn rất nhiều vì Tobu, nó thực sự hoạt động, tôi cũng sẽ kiểm tra thêm thông tin về nó. Chúc mừng
zanona

6

Một điều tôi đã trải nghiệm là sử dụng post-updatehook '--git-dir' hoạt động rất tốt nhưng git vẫn phàn nàn về một cây làm việc bị mất tích (mặc dù sử dụng '--work-tree')

Nói tóm lại, điều này không hiệu quả:

git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull

trong khi điều này làm việc:

cd /path/to/websites/testing
git --git-dir /path/to/websites/testing/.git pull


1

Nó không hoạt động à?

cd /home/smb/websites/testing
env -i git pull

Đã chỉnh sửa

Vẫn tốt hơn

cd /home/smb/websites/testing
unset GIT_DIR
git pull

0

Bạn đã thử với đường dẫn đầy đủ thay vì ~?

cd /home/smb/websites/testing
git pull

0

Kịch bản có thể được gọi với /bin/sh, mà không hiểu ~. Hãy thử nó với đường dẫn đầy đủ để ~thay thế.


0

Câu trả lời được đề xuất đầu tiên là đúng - khi hook đang chạy GIT_DIR, v.v. được đặt. Tuy nhiên, nếu bạn muốn có thể sử dụng tập lệnh trong kho lưu trữ khác thì phương thức đó bị thiếu sót vì mã cứng đặt lại GIT_DIR. Như họ ngụ ý, cách khác là loại bỏ biến bằng cách sử dụng env như sau: env -i git reset --hard Rõ ràng lệnh nào bạn chạy ở đó tùy thuộc vào bạn - đó chỉ là bit 'env -i' đó là bit quan trọng .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.