자식 태그 란 무엇입니까, 태그를 만드는 방법 및 자식 원격 태그를 체크 아웃하는 방법
원격 git 태그 사용 명령을 다음과 같이 체크 아웃 할 때 :
git checkout -b local_branch_name origin/remote_tag_name
다음과 같은 오류가 발생했습니다.
error: pathspec `origin/remote_tag_name` did not match any file(s) known to git.
git tag 명령을 사용할 때 remote_tag_name을 찾을 수 있습니다.
git의 태그가 무엇인지 설명하면서 시작합시다.
태그는 히스토리에서 특정 커밋 에 레이블을 지정하고 표시하는 데 사용됩니다 .
일반적으로 릴리스 지점 (예 : v1.0 등)을 표시하는 데 사용됩니다.태그가 브랜치와 유사하게 보일 수 있지만 태그는 변경되지 않습니다 .
그것은 지적 직접 A를 특정 커밋 역사에서.
태그가 리포지토리에 로컬로 있지 않으면 태그를 체크 아웃 할 수 없으므로 먼저 fetch
로컬 리포지토리에 태그를 지정해야합니다.
먼저 태그를 로컬에 존재하는지 확인하십시오
# --all will fetch all the remotes.
# --tags will fetch all tags as well
git fetch --all --tags --prune
그런 다음 실행하여 태그를 확인하십시오.
git checkout tags/<tag_name> -b <branch_name>
접두사 를 origin
사용하는 대신 tags/
.
이 샘플에는 2 개의 태그 버전 1.0 및 버전 1.1이 있으며 다음 중 하나를 사용하여 체크 아웃 할 수 있습니다.
git checkout A ...
git checkout version 1.0 ...
git checkout tags/version 1.0 ...
태그는 주어진 커밋에 대한 포인터 일 뿐이므로 위의 모든 작업은 동일합니다.
출처 : https://backlog.com/git-tutorial/img/post/stepup/capture_stepup4_1_1.png
모든 태그 목록을 보는 방법은 무엇입니까?
# list all tags
git tag
# list all tags with given pattern ex: v-
git tag --list 'v-*'
# list all tags
git tag
# list all tags with given pattern ex: v-
git tag --list 'v-*'
태그를 만드는 방법?
태그를 만드는 방법은 두 가지가 있습니다.
# lightweight tag
git tag
# annotated tag
git tag -a
2의 차이점은 주석이 달린 태그를 만들 때 git commit에서와 같이 메타 데이터를 추가 할 수 있다는 것입니다 :
이름, 전자 메일, 날짜, 주석 및 서명
태그를 삭제하는 방법?
# delete any given tag
git tag -d <tag name>
# Don't forget to remove the deleted tag form the server with push tags
# delete any given tag
git tag -d <tag name>
# Don't forget to remove the deleted tag form the server with push tags
특정 태그를 복제하는 방법?
주어진 태그의 내용을 잡기 위해 checkout
명령을 사용할 수 있습니다 .
위에서 설명한 것처럼 태그는 다른 커밋과 비슷하므로 checkout
SHA-1을 사용하는 대신 tag_name으로 간단히 바꾸십시오.
옵션 1:
# Update the local git repo with the latest tags from all remotes
git fetch --all
# checkout the specific tag
git checkout tags/<tag> -b <branch>
옵션 2 :
clone 명령 사용
git 은 clone 명령 에를 추가하여 얕은 복제 를 지원하므로 --branch
분기 이름 대신 태그 이름을 사용할 수 있습니다. Git은 주어진 SHA-1을 관련 커밋으로 "번역"하는 방법을 알고 있습니다.
# Clone a specific tag name using git clone
git clone <url> --branch=<tag_name>
자식 복제본 --branch =
--branch
결과 저장소의 커밋에서 태그를 가져와 HEAD를 분리 할 수도 있습니다.
태그를 푸시하는 방법?
git push --tags
모든 태그를 푸시하려면 :
git push --tags
주석이 달린 태그 및 현재 히스토리 체인 태그를 푸시하려면 다음을 사용하십시오.
git push --follow-tags
이 플래그 --follow-tags
는 커밋 및 둘 다인 태그 만 푸시 합니다.
- 주석이 달린 태그 (로컬 / 임시 빌드 태그를 건너 뛸 수 있음)
- 현재 분기 (히스토리에 있음)에서 도달 가능한 태그 (조상)
Git 2.4에서 구성을 사용하여 설정할 수 있습니다
git config --global push.followTags true
(이 답변은 작성하는 데 시간이 걸렸으며 codeWizard의 답변 은 목적과 본질이 정확하지만 완전히 완료되지는 않았으므로 어쨌든 게시 할 것입니다.)
"원격 Git 태그"와 같은 것은 없습니다. "태그"만 있습니다. 나는 학자,로 모든이 밖으로 포인트 1을 하지만, 거기에 캐주얼 힘내 사용자와 혼동의 큰 거래이며, 때문에 망할 놈의 문서는 매우 도움이되지 않습니다 2 초보자. (문서가 잘못되어 혼동이 발생하는지, 문서가 본질적으로 다소 혼란 스럽기 때문에 문서가 잘못 작성되었는지는 확실하지 않습니다.)
이 있습니다 더 제대로 "원격 추적 브랜치"라는 "원격 지사는"하지만, 그것의 가치는이 실제로 지역 단체 것을 지적. 그러나 (다시 발명하지 않는 한) 원격 태그는 없습니다. 로컬 태그 만 있으므로 태그를 사용하려면 로컬 태그를 가져와야합니다.
Git이 참조 하는 특정 커밋 이름의 일반적인 형식은로 시작하는 문자열입니다 refs/
. refs/heads/
분기 이름으로 시작하는 문자열 . refs/remotes/
이름이 원격 추적 분기로 시작하는 문자열 ; refs/tags/
태그로 시작하는 문자열 . 이름 refs/stash
은 숨김 참조입니다 ( git stash
후행 슬래시 부족에주의하십시오).
로 시작하지 않는 어떤 특별한 특수 케이스 이름이있다 refs/
: HEAD
, ORIG_HEAD
, MERGE_HEAD
, 그리고 CHERRY_PICK_HEAD
특히 (하지만 특정 커밋을 참조 할 수 이름도 모두 HEAD
일반적으로 브랜치의 이름, 즉, 포함을 포함하고는 ). 그러나 일반적으로 참조는로 시작합니다 .ref: refs/heads/branch
refs/
Git이이 혼동을 일으키기 위해하는 한 가지는 refs/
, 그리고 종종 뒤에 나오는 단어 를 생략 할 수 있다는 것 refs/
입니다. 예를 들어, 당신은 생략 할 수 있습니다 refs/heads/
또는 refs/tags/
로컬 지점 또는 참조 할 때 태그 사실이 있어야 생략 refs/heads/
로컬 브랜치를 체크 아웃 할 때! 결과가 모호하지 않거나 방금 언급 한대로 (해야 할 때)이 작업을 수행 할 수 있습니다 .git checkout branch
참조는 자신의 저장소뿐만 아니라 원격 저장소에도 존재한다는 것은 사실입니다. 그러나 Git은 매우 특정한 시간, 즉, 작업 중 fetch
및 push
작업 에서만 원격 저장소 참조에 액세스 할 수 있습니다 . 당신은 또한 사용할 수 있습니다 git ls-remote
또는 git remote show
그들을 볼 수 있지만, fetch
및 push
접촉의 더 흥미로운 점이다.
참조 사양
시 fetch
와 push
, 힘내 문자열을 사용이 호출 refspecs을 로컬 및 원격 저장소 사이의 참조를 전송합니다. 따라서이 시점과 참조 사양을 통해 두 개의 Git 리포지토리가 서로 동기화 될 수 있습니다. 이름이 동기화되면 원격 사용자와 동일한 이름을 사용할 수 있습니다. fetch
그러나 여기에는 특별한 마술이 있으며 , 지점 이름과 태그 이름 모두에 영향을 미칩니다.
git fetch
Git이 다른 Git ( "원격")을 불러 오거나 대화를하도록 지시하는 것으로 생각해야 합니다. 이 대화의 초반에 리모콘은 모든 참조 refs/heads/
와 모든 참조 및 refs/tags/
기타 참조를 모두 나열합니다 . Git은이를 통해 스캔하고 (일반적인 페치 참조 스펙에 따라) 브랜치 이름을 바꿉니다 .
다음과 같은 리모트에 대한 일반적인 참조 스펙을 살펴 보자 origin
:
$ git config --get-all remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*
$
이 참조 스펙은 Git에 모든 이름 일치 ( refs/heads/*
즉, 원격의 모든 분기) 를 가져 와서 이름을로 변경합니다 refs/remotes/origin/*
. 즉 일치하는 부분을 동일하게 유지합니다. 즉, 분기 이름 ( refs/heads/
)을 원격 추적 분기 이름 ( refs/remotes/
)으로 변경합니다. , refs/remotes/origin/
).
그것은이다 이 refspec을 통해 것을 origin
의 지점 원격에 대한 원격 추적 브랜치된다 origin
. 지점 이름은 원격 추적 지점 이름이되며이 경우 원격 이름이 origin
포함됩니다. +
refspec 앞의 더하기 부호 는 "force"플래그를 설정합니다. 즉, 원격 추적 분기는 일치시키기 위해 수행하는 작업에 관계없이 원격 분기 이름과 일치하도록 업데이트됩니다. (없이는 +
지점 업데이트가 "빨리 감기"변경으로 제한되며 태그 업데이트는 Git 버전 1.8.2 이후부터 무시됩니다. 그 전에 동일한 빠른 전달 규칙이 적용됩니다.)
태그
그러나 태그는 어떻습니까? 최소한 기본적으로는 아닙니다. 하나를 설정할 수 있으며,이 경우 참조 사양의 형식이 귀하에게 달려 있습니다. 또는 당신은 실행할 수 있습니다 git fetch --tags
. 사용은 --tags
추가의 효과가 refs/tags/*:refs/tags/*
즉 refspec에를, 모든 태그를 통해 제공합니다 ( 그러나 업데이트하지 않습니다 당신의 당신은 이미 그 이름을 가진 태그가있는 경우, 태그 에 관계없이 원격의 태그의 말씀의 편집 월 2017 : 힘내 2.10로 테스트 결과에 따르면 참조 사양을 --tags
읽는 것처럼 리모컨의 태그에서 태그 를 강제로 업데이트 하는 것으로 나타났습니다 +refs/tags/*:refs/tags/*
. 이는 이전 버전의 Git과 동작에 차이가있을 수 있습니다).
원격 경우 : 참고가된다는 여기서 이름을 변경하지 origin
태그가 xyzzy
, 당신은하지 않습니다, 당신은 git fetch origin "refs/tags/*:refs/tags/*"
, 당신은 얻을 refs/tags/xyzzy
(동일 리모컨으로 커밋 가리키는) 저장소에 추가됩니다. 사용하는 경우 +refs/tags/*:refs/tags/*
태그 xyzzy
가있는 경우 태그가의 태그 로 대체 됩니다 origin
. 즉, +
refspec 의 force 플래그는 "내 참조 값을 내 Git이 Git에서 가져온 값으로 대체"를 의미합니다.
가져 오는 동안 Automagic 태그
역사적인 이유로, 3 당신이 둘 다 사용하는 경우 --tags
옵션이나 --no-tags
옵션을, git fetch
특별한 조치를 취합니다. 위에서 말했듯이 원격은 로컬 Git이보고 싶어하는지 여부에 관계없이 모든 참조를 로컬 Git에 표시하는 것으로 시작됩니다 . 4 Git은이 시점에서 보는 모든 태그를 기록합니다. 그런 다음 가져 오는 모든 것을 처리하는 데 필요한 커밋 객체를 다운로드하기 시작할 때 해당 커밋 중 하나가 해당 태그와 동일한 ID를 가지고 있으면 git은 해당 태그 또는 여러 태그에 해당 ID가있는 경우 해당 태그를 추가합니다. 당신의 저장소.
편집 월 2017 : 힘내 2.10의 행동을 지금 보여줍니다 테스트 : 그 망할 놈이라는 태그를 제공하는 경우 T를 , 그리고 당신이라는 태그가없는 T를 , 그리고 커밋과 관련된 ID T는 자신의 가지 중 하나의 조상 당신 git fetch
이 검사하고 있다는 것을 Git 은 태그에 T 를 추가합니다 --tags
. 추가 --tags
하면 Git이 모든 태그 를 가져 오고 강제로 업데이트합니다.
결론
git fetch --tags
태그를 가져 오기 위해을 사용해야 할 수도 있습니다 . 태그 이름이 기존 태그 이름과 충돌하는 경우 (Git 버전에 따라) 일부 태그를 삭제 (또는 이름 변경) 한 다음을 실행하여 태그를 가져와야 할 수도 있습니다git fetch --tags
. 원격 브랜치와 달리 태그에는 자동 이름 변경 기능이 없으므로 태그 이름은 태그 이름과 일치해야하므로 충돌 문제가 발생할 수 있습니다.
하지만 대부분의 일반적인 경우에는 단순한 사람 git fetch
이 작업을 수행하여 커밋과 일치하는 태그를 가져 오며, 누구든간에 커밋을 게시 할 때 커밋에 태그를 지정하므로 태그를 따라 잡을 것입니다. 자신의 태그를 만들지 않거나 저장소와 다른 저장소를 혼합하지 않으면 (여러 리모컨을 통해) 태그 이름 충돌도 발생하지 않으므로 태그를 삭제하거나 이름을 바꾸는 데 소란을 피울 필요가 없습니다. 그들의 태그를 얻으십시오.
정규화 된 이름이 필요한 경우
나는 당신이 생략 할 수 있음을 위에서 언급 refs/
하고, 거의 항상 refs/heads/
하고 refs/tags/
그래서 대부분의 시간에. 하지만 언제 할 수 없습니까?
전체 (또는 거의 완전한 어쨌든) 대답에 문서 . Git은 링크에 제공된 6 단계 시퀀스를 사용하여 이름을 커밋 ID로 확인합니다. 흥미롭게도 태그는 브랜치를 재정의합니다. 태그 와 브랜치 가 있고 다른 커밋을 가리키는 경우 :gitrevisions
xyzzy
xyzzy
git rev-parse xyzzy
태그가 가리키는 ID를 제공합니다. 그러나-그리고 이것이 누락 된 것입니다 gitrevisions
- git checkout
분기 이름을 선호하므로 git checkout xyzzy
태그를 무시하고 분기에 배치합니다.
모호한 경우 거의 항상 전체 이름을 사용하여 참조 이름을 철자 refs/heads/xyzzy
하거나 refs/tags/xyzzy
. (주는이 것을 수행 으로 작업을 git checkout
하지만, 아마도 예상치 못한 방식으로, : git checkout refs/heads/xyzzy
분기 체크 아웃이 아닌 분리-HEAD 체크 아웃이 발생하면 그냥 참고로해야하는 이유입니다. git checkout
첫째 분기 이름으로 짧은 이름을 사용합니다 : 그 방법을의 xyzzy
태그 xyzzy
가 있어도 브랜치 를 체크 아웃하세요. 태그를 체크 아웃하고 싶다면을 사용 refs/tags/xyzzy
하세요.)
( gitrevisions
메모로) Git은을 시도 하기 때문에 태그가 지정된 커밋을 식별하기 위해 간단히 작성할 수도 있습니다 . (사람이 이름이 유효한 참조 쓰고 관리하는 경우 에를 , 그러나,이 같은 해결됩니다 . 그러나 일반적으로 단지 다양한 이름으로해야한다 .)refs/name
tags/xyzzy
xyzzy
xyzzy
$GIT_DIR
$GIT_DIR/xyzzy
*HEAD
$GIT_DIR
1 좋아, 좋아, "하지 만 학자 연하는 방법"을 참조하십시오. :-)
2 어떤 사람들은 "매우 도움이되지 않는다"고 말하고 실제로 동의하는 경향이 있습니다.
3 기본적으로, git fetch
원격 및 참조 사양의 전체 개념은 Git 1.5 즈음에 발생하는 Git에 대한 약간의 늦은 추가였습니다. 그 전에는 임시 특수한 경우가 있었고 태그 가져 오기도 그중 하나 였기 때문에 특수 코드를 통해 시작되었습니다.
네 도움이된다면은으로 원격 망할 놈의 생각 노출증 속어의 의미로.
특정 태그 코드를 얻으려면 새 분기를 작성하여 태그 코드를 얻으십시오. 나는 명령으로 그것을했다 :$git checkout -b newBranchName tagName
'Programming' 카테고리의 다른 글
Ubuntu에 Boost를 설치하는 방법 (0) | 2020.02.18 |
---|---|
C 프로그래밍 언어 표준에 따라 구조체를 초기화하는 방법 (0) | 2020.02.18 |
iPhone 앱 충돌 보고서 상징 (0) | 2020.02.18 |
Django 및 Python을 사용하여 JSON 응답 작성 (0) | 2020.02.18 |
두 클래스를 가진 요소에 적용되는 CSS 선택기 (0) | 2020.02.18 |