주석이 달린 태그와 주석이없는 태그의 차이점은 무엇입니까?


332

현재 커밋에 태그를 지정하려면 다음 명령 줄이 모두 작동한다는 것을 알고 있습니다.

git tag <tagname>

git tag -a <tagname> -m '<message>'

이 명령들 사이의 차이점은 무엇입니까?



1
@Thilo 이것은 정확히 중복 되지 않습니다 . 참조 된 질문은 관련 플래그가 아니라 주석을 달아야 할 시점에 관한 것입니다.
Todd A. Jacobs

1
이것은 Git의 문서에서 잘 설명되어 있습니다 : git-scm.com/book/en/Git-Basics-Tagging
Samy Dindane

주석이 달린 TLDR : commit; 주석 : 커밋, 저자, 날짜, (선택 사항) 코멘트
Antony Hatchkins

답변:


254

TL; DR

명령의 차이점은 하나는 태그 메시지를 제공하지만 다른 하나는 태그 메시지를 제공하지 않는다는 것입니다. 주석이 달린 태그에는 git-show (1)로 표시 할 수있는 메시지가 있으며 주석이없는 태그는 커밋에 대한 명명 된 포인터 일뿐입니다.

경량 태그에 대한 추가 정보

설명서 에 따르면 : "가벼운 태그를 만들려면 -a, -s 또는 -m 옵션을 제공하지 말고 태그 이름 만 제공하십시오." 주석이 달린 태그에 메시지를 작성하는 몇 가지 옵션이 있습니다.

  • 를 사용 git tag <tagname>하면 Git은 현재 개정판에 태그를 생성하지만 주석을 요구하지는 않습니다. 메시지없이 태그됩니다 (가벼운 태그입니다).
  • 를 사용할 때 git tag -a <tagname>, Git은 -m 플래그를 사용하여 메시지를 제공하지 않는 한 주석을 요구합니다.
  • 를 사용 git tag -a -m <msg> <tagname>하면 Git은 커밋에 태그를 지정하고 제공된 메시지로 주석을 달 수 있습니다.
  • 를 사용 git tag -m <msg> <tagname>하면 Git은 주석을 위해 -a 플래그를 전달한 것처럼 제공되고 제공된 메시지를 사용합니다.

기본적으로 태그에 주석과 관련된 다른 정보가 있는지 여부와 관계가 있습니다.


4
태그 "주석"과 커밋 메시지 사이에 차이가 있습니까?
Steve Bennett

3
@SteveBennett 예. 태그 주석은 커밋 메시지가 아닙니다. git-log (1);에서는 볼 수 없습니다. git-show (1)를 사용해야합니다.
Todd A. Jacobs

115
"주석"태그와 "가벼운"태그의 차이점은 메시지를 넘어선 것입니다. 메시지 ( git tag -a <tag> -m '') 없이 주석이 달린 태그를 가질 수 있지만 주석이 달린 태그 에는 항상 tagger (author) 및 date가 있습니다.
Piotr Findeisen

1
저도 마찬가지입니다. 버전 태그는 일반적으로 쓸모없는 메시지를 가지고 있습니다 (이름보다 더 많은 것을 말할 수 있습니까?). 불행히도,이 최고 투표 답변은이 차이점을 언급하지 않습니다.
Piotr Findeisen

44
주의해야 할 또 다른 중요한 사항은을 사용하여 태그를 원격 저장소 git push --follow-tags로 푸시하면 주석이 달린 태그 만 푸시됩니다.
Xatoo

209

주석이 달린 태그를 푸시하고 가벼운 로컬을 유지하십시오

man git-tag 말한다 :

주석이 달린 태그는 릴리스 용이며 경량 태그는 개인용 또는 임시 객체 레이블 용입니다.

그리고 특정 행동은이 권장 사항이 유용한 방식으로 이들을 구별합니다.

  • 주석이 달린 태그에는 커밋과 다른 메시지, 작성자 및 날짜가 포함될 수 있습니다. 따라서 릴리스 커밋을하지 않고도 릴리스를 설명하는 데 사용할 수 있습니다.

    경량 태그에는 추가 정보가 없으므로 개발에 직접 사용하기 때문에 필요하지 않습니다.

  • git push --follow-tags 는 주석이 달린 태그 만 푸시합니다.
  • git describe 명령 행 옵션이 없으면 주석이 달린 태그 만 표시됩니다.

내부 차이

  • 경량 태그와 주석이 달린 태그는 .git/refs/tagsSHA-1이 포함 된 파일 입니다.

  • 경량 태그의 경우 SHA-1은 커밋을 직접 가리 킵니다.

    git tag light
    cat .git/refs/tags/light
    

    HEAD의 SHA-1과 동일하게 인쇄합니다.

    따라서 다른 메타 데이터를 포함 할 수없는 것은 당연합니다.

  • 주석이 달린 태그는 객체 데이터베이스의 태그 객체를 가리 킵니다.

    git tag -as -m msg annot
    cat .git/refs/tags/annot
    

    주석이 달린 태그 객체의 SHA를 포함합니다.

    c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
    

    다음과 같이 내용을 얻을 수 있습니다.

    git cat-file -p c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
    

    샘플 출력 :

    object 4284c41353e51a07e4ed4192ad2e9eaada9c059f
    type commit
    tag annot
    tagger Ciro Santilli <your@mail.com> 1411478848 +0200
    
    msg
    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.11 (GNU/Linux)
    
    <YOUR PGP SIGNATURE>
    -----END PGP SIGNAT
    

    그리고 이것이 추가 메타 데이터를 포함하는 방법입니다. 출력에서 볼 수 있듯이 메타 데이터 필드는 다음과 같습니다.

    형식에 대한 자세한 분석은 git tag 객체의 형식과 SHA를 계산하는 방법에 있습니다.

보너스


1
이것은 현재 받아 들여지는 대답보다 훨씬 명확합니다. 감사.
Reece

43

차이는 완벽하게 설명되어 있습니다 여기에 .

기본적으로 경량 태그 는 특정 커밋을 가리키는 포인터입니다. 더 이상 정보가 저장되지 않습니다 . 반면에 주석이 달린 태그일반 객체로 , 작성자와 날짜가 있으며 자체 SHA 키가 있기 때문에 참조 할 수 있습니다.

아는 경우 사람 태그 무엇을 하고 당신을 위해 관련, 다음 태그를 주석을 사용합니다. 개발 시점에서 특정 지점에 태그를 지정하려는 경우 언제 누구와 관계없이 경량 태그로 충분합니다.

일반적으로 주석이 달린 태그를 사용하지만 실제로 프로젝트의 Git 마스터에게 달려 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.