2011-04-27 19 views
25

Tôi muốn thiết lập một móc git tạo cấu trúc thư mục kiểu CDN dựa trên các thẻ đến. Vì vậy, ví dụ, nếu thẻ cuối cùng trong kho lưu trữ cục bộ là "v1.2.1" và tôi kéo một cam kết với "v1.2.2", nó sẽ thấy thẻ mới và sao chép kho lưu trữ vào một trực tiếp mới (../1.2 .2) cho phù hợp.Làm cách nào để phản ứng với các thẻ mới trong git hooks?

Tôi khá chắc chắn tôi muốn đính kèm điều này vào sau khi nhận, tuy nhiên tôi không thể tìm thấy bất kỳ điều gì trong tài liệu về git hooks về cách đọc các thẻ đến. Chúng được giao trên một cái móc khác? Tôi thực sự cần phải có kịch bản shell chạy lệnh git để xem có bất kỳ commit mới nào có thẻ mới không?

Cảm ơn!

Trả lời

30

Thẻ được lấy làm giống như bất kỳ thẻ nào khác (như cam kết).
Nếu thẻ được đẩy đến một repo với post-receive hook, móc đó sẽ được gọi và sẽ liệt kê tất cả các cập nhật được cập nhật, đó là cả giá trị cũ và mới của tất cả các tham chiếu ngoài tên của chúng (trên đầu vào tiêu chuẩn).

Xem máy chủ này post-receive email móc ví dụ.

#!/bin/sh 

. $(dirname $0)/functions 

process_ref() { 
    oldrev=$(git rev-parse $1) 
    newrev=$(git rev-parse $2) 
    refname="$3" 

    set_change_type 
    set_rev_types 
    set_describe_tags 

    case "$refname","$rev_type" in 
     refs/tags/*,tag) 
     # annotated tag 
     refname_type="annotated tag" 
     function="atag" 
     short_refname=${refname##refs/tags/} 
     # change recipients 
     if [ -n "$announcerecipients" ]; then 
      recipients="$announcerecipients" 
     fi 
     ;; 
    esac 
} 

while read REF; do process_ref $REF; done 

Để làm việc này, bạn cũng phải cài đặt the functions file từ kho lưu trữ móc ví dụ nói trên.

+0

'$ 1, $ 2 và $ 3' đều không có giá trị đối với tôi khi tôi đẩy thẻ. – chovy

+0

@chovy strage. Tập lệnh tương tự này (http://www.kaarsemaker.net/blog/2013/10/16/automatically-pushing-local-git-repositories-other-sources/) không có cùng một vấn đề. – VonC

+0

Tôi đã chỉnh sửa ví dụ trong câu trả lời sao cho nó là một tập lệnh bash hoàn chỉnh, cho những người như tôi quá lười biếng để theo dõi liên kết sau khi nhận được –

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