2012-08-30 23 views
7

Sau khi tôi đẩy git repo địa phương của tôi đến máy chủ:bài gitolite nhận móc cho repo trần cụ thể

$ git push origin master 

Tôi muốn các repo trần trên máy chủ (sau khi nó nhận được đẩy từ tôi) tới:

$ cd /Users/me/Sites 
$ git pull 
$ exit 

tôi đã xem xét một số câu hỏi ở đây và họ đề cập móc trong $ HOME/gitolite/móc,

nhưng đây là những gì tôi đang làm việc với:

012.
[email protected]:gitolite $ pwd 
/Users/git/gitolite 
[email protected]:gitolite $ ls 
.git/     README.txt   install* 
CHANGELOG    check-g2-compat*  src/ 
COPYING    convert-gitosis-conf* t/ 

Làm cách nào để thêm móc hậu nhận cho một kho lưu trữ trần cụ thể?

Nếu tôi đi vào repo trần của tôi:

[email protected]:bare-repo.git $ ls hooks 
applypatch-msg.sample*  pre-rebase.sample* 
commit-msg.sample*   prepare-commit-msg.sample* 
post-update.sample*  [email protected] 
pre-applypatch.sample*  update.sample* 
pre-commit.sample* 

Tôi không thấy một cái móc sau nhận được. Đưa cái gì?

Trả lời

7

Cập nhật tháng 8 năm 2013, với sự gitolite mới nhất: Bây giờ bạn có official specific repo hook:

nó về cơ bản chỉ là việc tạo ra một liên kết tượng trưng trong <repo.git>/hooks trỏ đến một số tập tin bên trong $rc{LOCAL_CODE}/hooks/repo-specific (trừ gitolite-admin repo)


Câu trả lời gốc (

Đầu tiên, nếu bạn đang sử dụng gitolite V3, bạn có thể xác định móc bất kỳ, bao gồm móc post-receive (ngoại trừ móc update, xem using hooks): trước đó, với gitolite V2, móc pre-receive đã được đặt trước.

Bây giờ bạn có thể thêm một cái móc bằng cách sao chép nó vào thư mục bản sao địa phương gitolite-admin/common/hooks, và đẩy gitolite-admin lại cho máy chủ gitolite: gitolite sẽ đảm bảo rằng móc được khai báo cho tất cả Repos trần nó quản lý.

Bạn cũng có thể thêm trực tiếp móc của bạn trên máy chủ tại một địa điểm riêng biệt được thiết kế bởi các biến $LOCAL_CODE "rc" ("rc" có nghĩa là quy định tại gitolite.rc config file của bạn): $LOCAL_CODE/hooks/common. Xem "customizing gitolite".
Ý tưởng là để đảm bảo nâng cấp gitolite không xóa bất kỳ chương trình tùy chỉnh nào của bạn.

Đơn giản chỉ cần xác định một tập tin 'post-nhận', thực thi (chmod 755), và sao chép nó vào common/hooks thư mục bạn đã chọn (gitolite-admin repo địa phương cộng với git push, hoặc .gitolite trên máy chủ, hoặc $LOCAL_CODE trên máy chủ).
Lưu ý: thực tế là bạn không thấy tệp 'post-receive.sample' không ngăn bạn xác định móc đó.
Nếu được thực hiện trực tiếp trên máy chủ, bạn cần chạy gitolite setup --hooks-only để các móc tùy chỉnh của bạn được thiết lập trên tất cả repos trần.

Điều bạn sẽ không bao giờ làm là sao chép trực tiếp trên một trong các thư mục bare-repo.git/hooks của bạn: đó là công việc của gitolite để xuất bản các móc "phổ biến" cho tất cả kho lưu trữ trần của bạn.
Bằng cách đó, bạn có thể quản lý chúng trực tiếp thông qua bất kỳ bản sao nào của gitolite-admin repo (đẩy lùi repo đó sẽ cập nhật bất kỳ móc nào mà bạn có thể đã thay đổi).

"Tất cả repo trần" có nghĩa là móc post-receive bạn phải biết những gì repo trần nó hoạt động trên:
Bạn có thể làm điều đó bằng checking the value of $GIT_DIR (bộ vào thư mục gốc .git của repo trần mà móc này đang chạy).

Cuối cùng, cho các loại hình post-receive móc, xem "Git checkout in post-receive hook: “Not a git repository '.'":
Bạn cần phải xác định GIT_DIRGIT_WORK_TREE một cách rõ ràng đến điểm đến repo để cho git pull của bạn để thành công.

GIT_WORK_TREE=/Users/me/Sites GIT_DIR=/Users/me/Sites/.git git pull 
+1

Tôi cố gắng để thiết lập repo-cụ-móc (v3) sử dụng như sau: ** 1 ** Tôi tạo ra 'LOCAL_CODE =>, 'trong "$ ENV {HOME}/gitolite/địa phương." rc ** 2 ** Tôi thêm ''repo-specific-hooks',' vào ENABLE mảng trong rc, ** 3 ** Tôi tạo thư mục «local/hooks/repo-specific /' trong gitolite-admin, cam kết và đẩy rằng ** 4 ** Tôi thêm chuỗi: 'option hook.post-receive = deploy' trong conf/gitolite.conf cho' test' repo, tạo tệp 'local/hooks/repo-specific/deploy' trong conf tập tin với 0755, và cam kết và đẩy chúng ... ** 5 ** Tôi đã thực hiện cam kết/đẩy để kiểm tra repo, móc không bị sa thải, những gì tôi đã làm sai ? –

+0

symlink cũng không có ở đây, cố gắng chạy 'gitolite setup --hooks-only' mà không thành công. –

+0

@eicto Tôi đã chỉnh sửa câu trả lời với liên kết đến móc cụ thể trong gitolite: đảm bảo bạn có gitolite mới nhất. – VonC

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