현재 커밋에 태그를 지정하려면 다음 명령 줄이 모두 작동한다는 것을 알고 있습니다.
git tag <tagname>
과
git tag -a <tagname> -m '<message>'
이 명령들 사이의 차이점은 무엇입니까?
답변
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 플래그를 전달한 것처럼 제공되고 제공된 메시지를 사용합니다.
기본적으로 태그에 주석과 관련된 다른 정보가 있는지 여부와 관계가 있습니다.
답변
주석이 달린 태그를 푸시하고 가벼운 로컬을 유지하십시오
man git-tag
말한다 :
주석이 달린 태그는 릴리스 용이며 경량 태그는 개인용 또는 임시 객체 레이블 용입니다.
그리고 특정 행동은이 권장 사항이 유용한 방식으로 이들을 구별합니다.
-
주석이 달린 태그에는 커밋과 다른 메시지, 작성자 및 날짜가 포함될 수 있습니다. 따라서 릴리스 커밋을하지 않고도 릴리스를 설명하는 데 사용할 수 있습니다.
경량 태그에는 추가 정보가 없으므로 개발에 직접 사용하기 때문에 필요하지 않습니다.
- git push –follow-tags 는 주석이 달린 태그 만 푸시합니다.
git describe
명령 행 옵션이 없으면 주석이 달린 태그 만 표시됩니다.
내부 차이
-
경량 태그와 주석이 달린 태그는
.git/refs/tags
SHA-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
그리고 이것이 추가 메타 데이터를 포함하는 방법입니다. 출력에서 볼 수 있듯이 메타 데이터 필드는 다음과 같습니다.
- 가리키는 객체
- 가리키는 객체의 타입 예. 태그 객체는 커밋뿐만 아니라 얼룩과 같은 다른 유형의 객체를 가리킬 수 있습니다 .
- 태그의 이름
- 태거 아이덴티티 및 타임 스탬프
- 메시지. PGP 서명이 메시지에 어떻게 추가되는지 참고하십시오.
형식에 대한 자세한 분석은 git tag 객체의 형식과 SHA를 계산하는 방법에 있습니다.
보너스
-
태그에 주석이 달려 있는지 확인하십시오.
git cat-file -t tag
출력
commit
경량의 경우 태그 객체가 없으므로 커밋을 직접 가리 킵니다.tag
이 경우 태그 객체가 있기 때문에 주석이 달린
-
경량 태그 만 나열 : 모든 경량 태그를 나열하려면 어떻게해야합니까?
답변
큰 차이는 완벽하게 설명되어 있습니다 여기에 .
기본적으로 경량 태그 는 특정 커밋을 가리키는 포인터입니다. 더 이상 정보가 저장되지 않습니다 . 반면에 주석이 달린 태그 는 일반 객체로 , 작성자와 날짜가 있으며 자체 SHA 키가 있기 때문에 참조 할 수 있습니다.
아는 경우 사람 태그 무엇을 하고 때 당신을 위해 관련, 다음 태그를 주석을 사용합니다. 개발 시점에서 특정 지점에 태그를 지정하려는 경우 언제 누구와 관계없이 경량 태그로 충분합니다.
일반적으로 주석이 달린 태그를 사용하지만 실제로 프로젝트의 Git 마스터에게 달려 있습니다.