Programing

git-ls-remote를 나열 할 때 태그 이름 뒤에 "^ {}"가있는 이유는 무엇입니까?

lottogame 2020. 11. 15. 10:48
반응형

git-ls-remote를 나열 할 때 태그 이름 뒤에 "^ {}"가있는 이유는 무엇입니까?


이 질문에 이미 답변이 있습니다.

git ls-remote작업 트리에서 실행 하면 명령이 원본 저장소의 개정 목록을 출력합니다. 어떤 이유로 나는 모든 태그에 대해 2 개의 개정을 얻었으며 동일한 태그의 두 번째 개정에 대해 태그 이름에 다음이 포함됩니다.^{}

git ls-remote
From git@github.com:andris9/zzzzzz.git
d69e66d7c915b9682618b7f304b80cc0ae4c7809    HEAD
....
bb944682f7f65272137de74ed18605e49257356c    refs/tags/v0.1.6
771a930dc0ba86769d6862bc4dc100acc50170fa    refs/tags/v0.1.6^{}
a72251d945353a360087eb78ee75287c38a1c0e6    refs/tags/v0.1.7
d69e66d7c915b9682618b7f304b80cc0ae4c7809    refs/tags/v0.1.7^{}

나는 태그를 만든다.

git tag -a v0.1.8 -m "tag message"
git push --tags

git-ls-remote 매뉴얼 페이지 의 예에서 그러한 중복 태그가 없으므로 내가 뭔가 잘못하고 있습니까?


이 태그의 2 종류가 있습니다 - lightweightannotated. 경량 태그는 일부 객체를 가리키는 참조 일 뿐이며 주석이 달린 태그는 자체적으로 별도의 git 객체이며 작성자, 커미터, 커밋 메시지 등과 같은 더 많은 정보를 저장합니다.

git tag -a태그를 만들 git은 주석이 달린 태그를 만들었습니다.

^{}태그를 참조 해제하는데 사용되는 구문이다. 그것은 gitrevisions에 설명되어 있습니다 .

  • 태그 객체와 함께 사용하면 git은 태그가 아닌 객체를 찾을 때까지 태그를 재귀 적으로 역 참조합니다.

  • 태그가없는 객체와 함께 사용하면 아무 작업도 수행하지 않으며 ^{}

refs/tags/v0.1.6리포지토리 ref는 태그 객체를 가리키며, 태그를 만들 때 커밋 정보를 저장하고 있다고 생각하는 (태그가 아닌 객체)를 bb944682f7f65272137de74ed18605e49257356c차례로 가리 킵니다 771a930dc0ba86769d6862bc4dc100acc50170fa.

그래서 당신이 할 때 refs/tags/v0.1.6^{}, git은 태그를 역 참조하고 태그 771a930dc0ba86769d6862bc4dc100acc50170fa가 아닌 객체로 해결할 것 입니다.

git show-ref태그 만 나열하고 선택적으로 다음과 같이 역 참조하는 데 사용할 수 있는 명령 도 있으며 , 귀하의 경우 다음 출력을 생성해야합니다.

$ git show-ref --tags
bb944682f7f65272137de74ed18605e49257356c    refs/tags/v0.1.6
a72251d945353a360087eb78ee75287c38a1c0e6    refs/tags/v0.1.7

$ git show-ref --tags --dereference
bb944682f7f65272137de74ed18605e49257356c    refs/tags/v0.1.6
771a930dc0ba86769d6862bc4dc100acc50170fa    refs/tags/v0.1.6^{}
a72251d945353a360087eb78ee75287c38a1c0e6    refs/tags/v0.1.7
d69e66d7c915b9682618b7f304b80cc0ae4c7809    refs/tags/v0.1.7^{}

이를 확인하기 위해 git showcommand를 사용 하여 git 객체에 대한 자세한 정보를 제공 할 수 있습니다 .

이것은 내 테스트 git 저장소 중 하나의 정보입니다.

$ git show 43f9a98886ba873c0468c608f24c408b9991414f
tag v0.1
Tagger: Ash <tuxdude@OptimusPrime>
Date:   Sun Jul 15 00:14:43 2012 -0700

Tagging Stable repo 0.1 :)
-----BEGIN PGP SIGNATURE-----
<PGP-SIGNATURE>
-----END PGP SIGNATURE-----

commit e55df25f2321a6b2c9a02fa80ccba7cbe3c38c08
Merge: 796efcd 58e3a4d
Author: Ash <tuxdude@OptimusPrime>
Date:   Sun Jul 15 00:02:44 2012 -0700

    Merge branch 'dev' into 'master' for stable 0.1.

$ git show e55df25f2321a6b2c9a02fa80ccba7cbe3c38c08
commit e55df25f2321a6b2c9a02fa80ccba7cbe3c38c08
Merge: 796efcd 58e3a4d
Author: Ash <tuxdude@OptimusPrime>
Date:   Sun Jul 15 00:02:44 2012 -0700

    Merge branch 'dev' into 'master' for stable 0.1.

참고 URL : https://stackoverflow.com/questions/15472107/when-listing-git-ls-remote-why-theres-after-the-tag-name

반응형