Tôi mới dùng git và tôi muốn có thể nắm bắt thông điệp cam kết sau khi đẩy đến nguồn gốc/chủ và chạy tập lệnh bash (trên máy chủ) về những gì chuỗi chứa.Làm thế nào để chụp một thông điệp cam kết git và chạy một hành động
Ví dụ, nếu git tôi cam kết thông báo cho biết: [email] my commit message
Nếu thông báo cam kết chứa [email]
sau đó làm một hành động cụ thể, nếu không, đừng làm điều đó.
Dưới đây là một kịch bản mẫu bash Tôi đang nghĩ đến việc sử dụng trong post-receive
móc:
#!/bin/bash
MESSAGE= #commit message variable?
if [[ "$MESSAGE" == *[email]* ]]; then
echo "do action here"
else
echo "do nothing"
fi
Về cơ bản tất cả tôi cần phải biết là những gì các tên biến cho các cam kết thông báo là, để sử dụng trong bash trên kịch bản? Ngoài ra, tôi không chắc liệu đây có phải là móc thích hợp để làm điều này hay không.
Vì vậy, đánh dấu '[email]' này sẽ vĩnh viễn là một phần của thông điệp cam kết của bạn? – Cascabel
Các phương pháp có thể khác: sử dụng biến môi trường để báo hiệu móc nối, vì vậy không bao giờ có bất cứ điều gì trong thông điệp cam kết về nó. Sử dụng bí danh để làm điều này dễ dàng hơn. Hoặc, nếu bạn muốn viết nó trong tin nhắn, phát hiện đánh dấu trong một móc trước khi cam kết, do đó bạn có thể sửa đổi tin nhắn trước khi cam kết được ghi lại. (Hoặc giả sử cam kết sẽ thành công và gửi email ngay lập tức, hoặc lưu trữ một cái gì đó cho móc hậu cam kết để khóa ...) – Cascabel
Hoặc bạn có thực sự làm việc này sau khi nhận, không đăng cam kết? Sau đó, bạn tất nhiên không thể sửa đổi thông báo cam kết nữa. Tuy nhiên, điều đó có nghĩa là giải pháp của bạn không hoạt động: một push không chỉ đẩy một cam kết, nó cập nhật bất kỳ số lượng refs, mỗi trong số đó có thể bao gồm bất kỳ số lượng các cam kết mới. Bạn thực sự nên xem [ví dụ] (http://git.kernel.org/?p=git/git.git;a=blob;f=contrib/hooks/post-receive-email;hb=HEAD) trong git của contrib. Nó xử lý khá nhiều, và bạn có thể sửa đổi nó để chỉ chú ý đến các cam kết nói '[email]'. – Cascabel