Tôi nhập git tag
và nó liệt kê các thẻ hiện tại của tôi:
1.2.3
1.2.4
Làm cách nào để xác định cái nào trong số này được chú thích và cái nào nhẹ?
Tôi nhập git tag
và nó liệt kê các thẻ hiện tại của tôi:
1.2.3
1.2.4
Làm cách nào để xác định cái nào trong số này được chú thích và cái nào nhẹ?
Câu trả lời:
git for-each-ref
cho bạn biết theo mặc định mỗi ref là gì, id của nó và kiểu của nó. Để giới hạn nó chỉ với các thẻ, hãy làm git for-each-ref refs/tags
.
[T] he xuất ra có ba trường: Hàm băm của một đối tượng, loại đối tượng và tên trong refs / thẻ đề cập đến đối tượng. Cái gọi là thẻ "nhẹ" là một tên trong các thẻ refs / đề cập đến một
commit
đối tượng. Thẻ "annotated" là một tên trong refs / thẻ đề cập đến mộttag
đối tượng.- Solomon Slow (trong phần bình luận)
Đây là một ví dụ:
git for-each-ref refs/tags
902fa933e4a9d018574cbb7b5783a130338b47b8 commit refs/tags/v1.0-light
1f486472ccac3250c19235d843d196a3a7fbd78b tag refs/tags/v1.1-annot
fd3cf147ac6b0bb9da13ae2fb2b73122b919a036 commit refs/tags/v1.2-light
commit
hoặc a tag
. Tôi cho rằng đó là các thẻ nhẹ và có chú thích tương ứng?
commit
có nhẹ và tag
được chú thích không?
commit
đối tượng. Thẻ "annotated" là một tên trong refs / thẻ đề cập đến một tag
đối tượng.
Loại git show-ref -d --tags
lệnh thực hiện điều đó, vì các thẻ nhẹ xuất hiện một lần trong đầu ra và các thẻ chú thích xảy ra hai lần. Ngoài ra, chỉ các thẻ được chú thích mới bao gồm toán tử tham chiếu "^ {}" trong đầu ra.
588e9261795ec6dda4bd0a881cf1a86848e3d975 refs/tags/1.2.3
7fe2caaed1b02bb6dae0305c5c0f2592e7080a7a refs/tags/1.2.4
588e9261795ec6dda4bd0a881cf1a86848e3d975 refs/tags/1.2.4^{}
Và đầu ra đó không thể được xoa bóp bằng các lệnh unix sort, sed, cut, và uniq để làm cho đầu ra dễ đọc hơn:
git show-ref -d --tags |
cut -b 42- | # to remove the commit-id
sort |
sed 's/\^{}//' | # remove ^{} markings
uniq -c | # count identical lines
sed 's/2\ refs\/tags\// a /' | # 2 identicals = annotated
sed 's/1\ refs\/tags\//lw /'
Đối với repo gốc của tôi (từ câu hỏi của tôi), nó xuất ra như sau:
lw 1.2.3
a 1.2.4
(ví dụ: 1.2.3 là "nhẹ" và "1.2.4" được chú thích).
Lấy tên thẻ (nói foo
) và sau đó thực hiện a git cat-file -t foo
. Nếu đó là một thẻ được chú thích, cat-file
sẽ cho bạn biết rằng đó là một "thẻ". Nếu đó là một thẻ đơn giản, cat-file
sẽ cho bạn biết rằng đó là "cam kết".
Cập nhật: Như oxymoron đã nói trong bình luận của mình, git show
nó cũng hoạt động nhưng nó cung cấp cho bạn nhiều thông tin hơn là chỉ loại thẻ đó là gì.
Hãy thử sử dụng git describe
https://git-scm.com/docs/git-describe
Theo mặc định (không có --all hoặc --tags) git description chỉ hiển thị các thẻ được chú thích.
git tag -n
làm gì cho bạn không