2014-10-15 13 views
36

Tôi đã nhận được một thông báo lỗi khi tạo thẻ chứa [ nhân vật:Tên nào là thẻ git hợp lệ?

gây tử vong: '[' không phải là một tên thẻ hợp lệ.

Câu hỏi: có quy tắc nào cho các thẻ trong git không?

Trả lời

48

Bạn có thể kiểm tra xem tên của nó là hợp lệ với

git check-ref-format 

page này chứa những hạn chế trên một tên hợp lệ. Trích dẫn từ trang (có thể lỗi thời trong tương lai):

  1. Họ có thể bao gồm dấu gạch chéo / cho thứ bậc (thư mục) nhóm, nhưng không có thành phần slash-tách ra có thể bắt đầu với một dấu chấm . hoặc kết thúc với chuỗi .lock.

  2. Chúng phải chứa ít nhất một /. Điều này thực thi sự hiện diện của một danh mục như heads/, tags/ vv nhưng tên thực tế không bị hạn chế. Nếu tùy chọn --allow-onelevel được sử dụng, quy tắc này sẽ được miễn.

  3. Chúng không thể có hai dấu chấm liên tiếp .. ở bất kỳ đâu.

  4. Họ không thể có ký tự điều khiển ASCII (ví dụ: byte có giá trị thấp hơn \ 040, hoặc \ 177 DEL), không gian, dấu ngã ~, caret ^, hoặc ruột : bất cứ nơi nào.

  5. Họ không thể có dấu hỏi ?, dấu hoa thị * hoặc mở ngoặc vuông [ ở mọi nơi. Xem tùy chọn --refspec-pattern bên dưới để biết ngoại lệ cho quy tắc này.

  6. Họ không thể bắt đầu hoặc kết thúc với một dấu gạch chéo / hay chứa nhiều nhát chém liên tiếp (thấy tùy chọn --normalize dưới đây để biết một ngoại lệ cho quy tắc này)

  7. Họ không thể kết thúc với một dấu chấm ..

  8. Chúng không thể chứa chuỗi @{.

  9. Chúng không thể là ký tự đơn @.

  10. Chúng không được chứa \.

Như bạn thấy, trong trường hợp bạn vi phạm quy tắc (5).

Bạn có thể sử dụng --normalize cờ để bình thường hóa thẻ đối với dấu gạch chéo (loại bỏ dấu gạch chéo hàng đầu cũng như những người liên tiếp) với:

git check-ref-format --normalize "tags/weird//tag" 

Các tags/ loài phần mà bạn đang xác nhận một tag.

Sau khi thảo luận với @NikosAlexandris, bạn có thể viết một lót sau để kiểm tra thẻ <some-tag> với dòng chữ:

git check-ref-format "tags/<some-tag>" && echo "Valid tag" || echo "Invalid tag!" 
+1

Tùy chọn --normalize thực sự chỉ xử lý dấu gạch chéo. Nó không hoạt động cho các vấn đề khác, chẳng hạn như sự hiện diện của ~. –

+0

@VincentFourmond: thực sự, chương trình chấm dứt với mã thoát '1' (do đó lỗi), một lỗi có lẽ? –

+3

không, nó hoạt động như mong đợi từ trang người đàn ông: 'Normalize refname bằng cách loại bỏ bất kỳ dấu gạch chéo hàng đầu (/) ký tự và sụp đổ chạy của slashes liền kề giữa các thành phần tên thành một dấu gạch chéo đơn. Iff refname bình thường là hợp lệ sau đó pint nó để sản lượng tiêu chuẩn và thoát ra với một trạng thái 0. (--print là một cách không được chấp nhận để đánh vần - bình thường hóa.) 'Nó không chỉ là những gì bạn nói; -) ... –

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