2013-10-30 15 views
5

Chúng tôi đang sử dụng móc hậu nhận trong Git để triển khai một "ứng dụng" PHP. Kịch bản lệnh (Bash) kiểm tra tên chi nhánh và thực hiện một rsync trên máy chủ chính xác dựa trên một tiền tố trong tên chi nhánh.Git: Đừng gọi móc sau khi xóa chi nhánh

Công việc này khá tốt, ngoại trừ một điều: nó cố gắng triển khai khi chúng tôi xóa chi nhánh.

Tôi đã kiểm tra ở nhiều nơi và tôi không tìm cách tìm ra từ tập lệnh nếu thao tác bị xóa.

Có cách nào để đạt được điều này không. Kịch bản lệnh nằm trên một kho lưu trữ trống (được quản lý bởi Gitolite), nó không nằm trong máy trạm phát triển.

Trả lời

14

Khi git nhận một sự thúc đẩy, móc post-receive được gọi và thông qua dữ liệu trên thiết bị nhập chuẩn về mỗi ref đó đã được giao, trong dãy <old-sha> <new-sha> <ref-name>, như vậy:

e1f5c274e296f1c5148161f9d4e5eb43a6743e54 1eea3f51cf926c3710f8fa4a06f503041c4597f0 refs/heads/master 

Khi một nhánh bị xóa, <new-sha> nhập là tất cả số không, như vậy:

6b239c481453c7fc2513b02e8aa0cd9c1ffa25cb 0000000000000000000000000000000000000000 refs/heads/foo 

vì vậy, bạn có thể điều chỉnh móc post-receive bạn để phát hiện này (và ngăn chặn chi nhánh này làm hiển thị một triển khai) sử dụng logic như:

#!/bin/sh - 

while read OLDSHA NEWSHA REF ; do 
    if [ "$NEWSHA" = "0000000000000000000000000000000000000000" ]; then 
    # This ref has been deleted! Respond appropriately. 
    fi 
done 

Hãy nhớ rằng một lần nhấn có thể chứa cập nhật nhiều nhánh! Có thể bạn sẽ muốn tích lũy một tập hợp các nhánh cần được triển khai, bắt đầu bằng tiền tố thích hợp và có một sốkhông đồng nhất.

+0

Đó là phần còn thiếu, cảm ơn rất nhiều! –

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