nhận được thông báo "death: not a git repository: '." "khi sử dụng post-update hook để thực thi' git pull 'trên một kho lưu trữ khác


89

Tôi mới sử dụng git nên tôi xin lỗi (và vui lòng sửa lại cho tôi) nếu tôi sử dụng sai thuật ngữ ở đây, nhưng tôi sẽ cố gắng hết sức.

Tôi đang cố gắng thiết lập repo git trần (trung tâm) và bản sao làm việc của trang web phát triển (chính) trên máy chủ web. Tôi đã cố gắng tạo mẫu sau bài viết này . Tôi muốn bản sao làm việc phát triển được cập nhật bất cứ khi nào trung tâm repo được đẩy đến. Tôi có ấn tượng rằng cái móc thích hợp cho cái này post-update, cái mà tôi đã tạo ra như vậy:

#!/bin/sh
whoami
cd /path/to/working-copy/
RET=`git pull`
echo $RET

Cập nhật

Khi tôi đẩy các thay đổi từ kho cục bộ của mình sang trung tâm trần, tôi nhận được kết quả sau từ tập lệnh sau cập nhật:

remote: sites
remote: fatal: Not a git repository: '.'

Tuy nhiên, nếu tôi SSH vào máy chủ với tư cách là 'trang web' của người dùng và thực thi tập lệnh này theo cách thủ công, nó hoạt động tốt. Bất kỳ ý tưởng nào về điều gì có thể xảy ra với hook hoặc script này?

Câu trả lời:


179

Đây là tập lệnh cuối cùng đã hoạt động. Tôi nghĩ rằng một chút mà tôi đã thiếu ban đầu khiến nó không thể hoạt động từ xa làunset GIT_DIR

#!/bin/sh
cd /path/to/working-copy/ || exit
unset GIT_DIR
git pull repo branch

exec git-update-server-info

18
Tôi có thể xác nhận, việc bỏ đặt sẽ GIT_DIRkhắc phục được sự cố.
jmtd

16
Đối với những người sẵn sàng hiểu tại sao: đó là vì git sử dụng biến GIT_DIRthay vì PWD. cd-ing thay đổi PWDkhông phải GIT_DIR. Phải có một dự phòng trong git từ GIT_DIRđến PWDnếu cái đầu tiên không có sẵn.
zupa

Câu hỏi đặt ra là tại sao git phải thấy cần thiết phải làm điều này cho hook script (đặt GIT_DIR để ngay cả script có 'cd' ở nơi khác 'git anything' vẫn sẽ hoạt động)? Cá nhân tôi sẽ chọn rằng git không làm loại phép thuật này.
Steven Haryanto

2
Lý do đằng sau điều này là Git đang áp dụng một số biến môi trường cho tất cả các lệnh git cốt lõi.
Casey

Điều gì xảy ra khi có xung đột hợp nhất sau đó git pull?
lolololol ol


0

Mặc dù chưa đặt nhưng GIT_DIR vẫn hoạt động.

sự cố xảy ra khi bạn đặt sai GIT_DIR ở một nơi khác.

thay vào đó bạn chỉ có thể thêm: GIT_DIR = .git / Nó sẽ hoạt động


0

Trong trường hợp của tôi, tôi đã chỉ định một cây làm việc và điều này phá vỡ một số lệnh, như pull(hoặc chính xác hơn fetch).

Để hủy đặt cây làm việc nếu nó nằm trong cấu hình git của bạn, hãy thông qua:

git config --unset core.worktree

(Có nhiều cách khác để thiết lập cây công việc)

Điều quan trọng cần lưu ý,

Vấn đề của bạn sẽ không có gì thay đổi trừ khi chính bạn đã đào cái hố này xung quanh mình bằng cách sử dụng một worktree tùy chỉnh ngay từ đầu.

Banter:

Điều này ngụ ý với tôi rằng git internals sử dụng các đường dẫn liên quan đến worktree + .git/trong một số trường hợp. Theo kinh nghiệm của tôi, các worktrees không được hỗ trợ tốt, ngoại trừ các phần cơ bản nhất của git. Tôi chưa thử nghiệm kỹ lưỡng, Git có thể sẽ hoạt động nếu tôi đặt bất kỳ biến cấu hình thư mục git nào là đúng, mà tôi chưa chơi với.


-1

Bạn có thể có vấn đề về quyền. Tôi không chắc bạn đã thiết lập repo git trần của mình như thế nào, nhưng nếu nó đang chạy dưới quyền gitngười dùng, hãy đảm bảo rằng gitngười dùng đó được phép thực hiện git pulltrong thư mục dự án của bạn.

Tùy chọn thử điều này để biết bạn là người dùng nào khi chạy hook:

echo `whoami`

nếu tôi ssh vào máy chủ với tư cách là người dùng git, tôi có thể sử dụng git pull trong thư mục dự án của mình mà không gặp vấn đề gì. Tôi tin rằng đó là người dùng nên thực thi tập lệnh. Tôi có thể thử thêm dòng whoami vào tập lệnh, nhưng đầu ra từ tập lệnh đó sẽ đi đâu khi nó được thực thi dưới dạng hook? Có lẽ tôi cần gửi đầu ra đó đến tệp nhật ký thay vì gửi tiếng vọng?
Ty W

Điều gì echo `whoami`làm điều đó whoamikhông?
Christoffer Hammarström

Đầu ra cho stdout từ một tập lệnh hook được hiển thị cho điều khiển từ xa thực hiện hành động. Hoặc, nói cách khác, nếu bạn nói 'git push', đầu ra từ hook trên điều khiển từ xa sẽ hiển thị trong stdout của bạn.
ebneter

vâng, nhận thấy điều đó khi tôi đang nghịch đồ. rất thuận tiện :)
Ty W
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.