2010-11-15 33 views

Trả lời

21

Một cách trực tiếp hơn nhận được cùng một thông tin là:

git cat-file tag <tagname> 

Điều này sử dụng một lệnh và tránh đường ống.

tôi đã sử dụng này trong một kịch bản bash như sau:

if git rev-parse $TAG^{tag} -- &>/dev/null 
then 
    # Annotated tag 
    COMMIT=$(git rev-parse $TAG^{commit}) 
    TAGGER=($(git cat-file tag $TAG | grep '^tagger')) 
    N=${#TAGGER} # Number of fields 
    DATE=${TAGGER[@]:$N-2:2} # Last two fields 
    AUTHOR=${TAGGER[@]:1:$N-3} # Everything but the first and last two 
    MESSAGE=$(git cat-file tag $TAG | tail -n+6) 
elif git rev-parse refs/tags/$TAG -- &>/dev/null 
then 
    # Lightweight tag - just a commit, basically 
    COMMIT=$(git rev-parse $TAG^{commit}) 
else 
    echo "$TAG: not a tag" >&2 
fi 
+0

Đó là đẹp hơn nhiều, cảm ơn! Ví dụ đẹp quá. – quornian

17

git show $TAG sẽ hiển thị cho bạn thông tin cho thẻ cũng như cam kết mà thẻ trỏ đến.

Nếu bạn có cái gì đó đã làm việc cho bạn, nhưng là khó sử dụng để gõ, bạn luôn có thể thiết lập một bí danh:

[alias] 
     showtag = !sh -c 'git rev-parse $1 | xargs git cat-file -p' - 

Và gọi nó với:

$ git showtag my-tag-name 
+1

Cảm ơn. Tôi cần phải đề cập đến tôi cũng đã quản lý để có được như xa như 'git show --quiet --pretty =" format: "$ TAG' nhưng đó là chủ yếu giống như ở trên. – quornian

+0

@quornian: Bạn có thể sử dụng chức năng bí danh của Git. Tôi đã cung cấp một ví dụ trong câu trả lời của tôi. – mipadi

4

này đã được trả lời trong một thời gian dài trước đây nhưng vẫn là kết quả tìm kiếm hàng đầu mặc dù nó không phải là giải pháp tốt nhất nữa, vì vậy ở đây nó đi :

Command:

git for-each-ref refs/tags/$TAG --shell --format=' 
TAG=%(refname) 
COMMIT=%(objectname) 
TAGGER=%(tagger) 
EMAIL=%(taggeremail) 
DATE=%(taggerdate) 
CONTENTS=%(contents) 
' 

--shell d oes trích dẫn cho các kịch bản Shell. Ngoài ra còn có --perl, --python--tcl. Nếu bạn không muốn viết cả định dạng như một tùy chọn dòng lệnh, bạn cũng có thể đặt nó trong một file.txt và làm điều này:

git for-each-ref refs/tags/<tag> --shell --format="$(cat file.txt)" 

Output:

TAG='refs/tags/4.1.0-RC1' 
COMMIT='973cc103f942330550866588177fe53ea5765970' 
TAGGER='ml_' 
EMAIL='<[email protected]>' 
DATE='Fri Sep 16 14:14:50 2016 +0200' 
CONTENTS='Release 3: 
* INSTALL.md added. 
* GIT.md modified. 
' 

Thông tin thêm tại đây: https://git-scm.com/docs/git-for-each-ref

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