자식 태그도 푸시됩니까?


190

리포지토리를 만들었으므로 생성 한 태그가 리포지토리로 푸시되지 않은 것으로 보입니다. 내가 할 때 git tag로컬 디렉토리에있는 모든 태그가 존재하지만 원격 저장소에 로그온하고 수행 할 때 git tag, 처음 몇 쇼를.

무엇이 문제가 될 수 있습니까?.


3
git push --follow-tags유용 할 수 있습니다, 아래 내 답변을
VonC


1
중복에 동의하십시오 : 이것은 오래되었지만 다른 질문이 더 좋습니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

답변:


247

당신은 이것을 할 수 있습니다 :

git push --tags

27
필자는 HEAD 참조가 푸시되지 않음을 의미하므로 태그 만 푸시한다는 것을 의미합니다.
Dan Rosenstark

47
" git push --tags동료가 모든 태그를 푸시하도록 훈련을받을 때 동료가 나쁜 태그를 제거하기가 매우 어려울 수 있으므로 다른 사람을 사용하거나 교육하지 않는 것이 좋습니다. 새 태그를 푸시하려고합니다. 이로 인해 모든 사용자에게 git push origin <tag_name>지금 사용하도록 조언 할 것 입니다. " - 복사 stackoverflow.com/a/5195913/4130619
감소 활동

다른 답변 인 stackoverflow.com/a/16164809/11635 를 수락해야 한다고 생각합니다 . 그렇지 않더라도 반드시 읽어야합니다. 장단점을 제공하고 궁극적으로 오늘날보다 실용적이고 정확한 답변을 제공합니다
Ruben Bartelink

140

기본 git 원격 구성에서는 태그를 명시 적으로 푸시해야합니다 ( 태그 는 커밋과 함께 자동으로 페치됩니다 ). 당신은 사용해야합니다

$ git push <remote> tag <tagname>

단일 태그를 푸시하거나

$ git push <remote> --tags

모든 태그 git push --tags를 푸시 하거나 기본 리모컨 (일반적으로 origin) 으로 푸시합니다 .

이는 태그 푸시를 명시 적으로 만들기위한 의도 된 동작입니다. 푸시 태그는 일반적으로 의식적인 선택이어야합니다.


Junio ​​C. Hamano가 내용 요약 (@Andre Miras의 의견 링크)

가져올 때 누군가가 게시 한 원격 저장소와 상호 작용하고 있습니다. 이는 다음을 의미합니다.

  1. 존재하는 태그 세트에는 게시자가 사람들이보고 싶어하는 모든 것이 있으며
  2. 당신뿐만 아니라 다른 사람들도 같은 태그를 볼 수 있습니다.

즉, 가져 오는 리포지토리의 태그는 공개 및 공유되도록 설계되었습니다. 모든 사람이 동일한 태그를 쉽게 가져 오면 개발자 간의 커뮤니케이션이 용이 해집니다.

그렇기 때문에 git fetch태그를 자동으로 "따라"야합니다. 즉, 수정 버전을 다운로드 할 때 태그를 다운로드합니다. 즉, 게시 된 모든 관련 태그를 다운로드 합니다.

푸시 할 때 대부분의 시간이 공개되지 않은 작업 저장소에서 푸시하고 해당 저장소의 태그가 공개되지 않도록 설계되었습니다. 고유 한 로컬 태그를 사용하여 진행 상황을 표시 할 수 있으므로 저장소의 모든 태그를 변경 사항을 게시하기 위해 푸시하려는 저장소로 맹목적으로 푸시하는 것은 의미가 없습니다.

따라서 태그를 공개로 표시하려면 태그를 명시 적으로 푸시해야합니다.


또는 항상 모든 태그를 푸시하도록 푸시하려는 리모컨을 구성 할 수 있습니다 (예 .git/config:

[원격 "게시"] # 또는 이름이 무엇이든
    url = ...
    푸시 = + refs / heads / * : refs / heads / *
    푸시 = + refs / tags / * : refs / tags / *

즉 , 모든 헤드 (모든 분기) 및 모든 태그를 강제로 푸시합니다 (헤드를 강제로 푸시하지 않으려면 참조 스펙에서 '+'접두사를 제거하십시오).


이것이 항상 모든 헤드의 '강제 푸시'를 수행하지 않습니까?
Stefan Näwe

@ 스테판 : 네 그렇습니다. 업데이트되었습니다.
Jakub Narębski

19
"이것은 태그를 명시 적으로 표현하기위한 의도 된 동작입니다. 태그를 푸시하는 것은 일반적으로 의식적인 선택이어야합니다." 나는 이론적 근거를 이해하지 못한다. Git이 태그를 자동으로 푸시하는 것이 왜 나쁜지 자세히 설명 할 수 있습니까?
Ryan Lundy

13
@Kyralessa,이 게시물 git.661346.n2.nabble.com/… 에서 Junio ​​C Hamano (Git의 현재 관리자)는 태그를 자동으로 푸시하는 것이 나쁜 이유를 설명합니다.
Andre Miras

@AndreMiras이 멋진 링크에 감사드립니다. Junio의 게시물을이 답변에 통합 할 수 있다면 좋을 것입니다.
Homer6

67

이후 참고 자식 1.8.3 (2013 4월 22D) , 더 이상 푸시 태그에 다음 분기를 밀어이 명령을 수행해야하고, :

새로운 " --follow-tags"옵션은 분기를 밀어 낼 때 주석이 달린 관련 태그git push푸시 하도록 지시합니다 " " .

이제 새로운 커밋을 추진할 때 시도 할 수 있습니다.

git push --follow-tags

그러나 모든 로컬 태그를 푸시 하지는 않지만 커밋이 참조 하는 주석달린 태그 만 푸시합니다 git push.


이것은 Junio ​​C Hamano ( gitster)커밋 c2aba15 에 도입했습니다 .

새로운 옵션 " --follow-tags"은 git push다른 쪽에서 누락되고 다른 방식으로 푸시 된 히스토리로 도달 할 수있는 주석이 달린 태그를 푸시하도록 " "에 지시 합니다.

예를 들어, " simple", " current"또는 " upstream"푸시를 사용하는 경우 일반적으로 히스토리를 푸시하여 현재의 커밋으로 이동합니다 HEAD.
이 옵션을 사용하면 해당 커밋에서 도달 할 수있는 모든 주석이 달린 태그를 다른쪽으로 푸시 할 수도 있습니다.


이 설정 push.followTags--follow-tags기본적 으로 포함시킬 수 있습니다 (Git 2.4.1+, 2015 년 2 분기). 자세한 내용은 " 동시에 자식 커밋 및 태그를 밀어 "


3
주석이 달린 모든 태그 만 푸시 합니다. 대부분의 사람들 / 프로젝트는 가벼운 태그를 사용하고 있습니다 . 따라서 대부분의 경우 git push --follow-tags더 이상 추진하지 않습니다git push
Jarl

3
@ Jarl 예, 나는 대답에 "주석을 붙였습니다"라고 언급했습니다. 그러나 실제로 주석이 달린 태그 만 사용했으며 순전히 내부 사용을 위해 가벼운 태그를 예약했습니다 (즉, 절대로 밀어 넣을 의도가 없음).
VonC 2016 년

@VonC : 당신은 여기에 언급 된 바와 같이 지금,이 기본을 만드는 설정 옵션이있다 : stackoverflow.com/a/3745250/946850
krlmlr

19

내가 보통하는 일은 :

[원격 "게시"] # 또는 이름이 무엇이든
    url = ...
    푸시 = :
    푸시 = + refs / tags / * : refs / tags / *

그것은 이미 존재하는 모든 브랜치와 태그를 푸시한다는 것을 의미합니다. 강제로 누르지 않으며 수동으로 누르지 않은 분기를 누르지 않습니다.


사용자의 전역 자식 설정에도 넣을 수 있습니까? 그렇다면 어떻게? 감사! :)
gucki

태그를 강제하고 있지만 분기는 아닌 것 같습니다.
Adrian Ratnapala

글쎄, 아니, 나는 썼다. 새로운 태그를 밀어 넣을 것이고, 강제로 밀어 넣지 않을 것이며, 아직 밀지 않은 지점을 밀어 넣지 않을 것이다.
mat

나는 Jakub의 제안을 시도했지만 로컬에서만 원했던 지점을 밀고있었습니다. 이 제안, 매트는 완벽하게 작동합니다. 태그를 동기화하지만 원격 추적 분기가 아닌 경우 분기를 동기화하지 않습니다 (즉, 새 분기를 원격으로 푸시하지는 않지만 이미 원격에있는 경우 업데이트합니다). 참고 : 이름이 같은 태그 및 분기가있는 경우 "둘 이상 일치"오류가 발생합니다. lostechies.com/jasonmeridth/2010/02/27/refspec-matches-more-than-one/을 참조하십시오 .
josephdpurcell 2016 년

5

모든 태그를 강제로 가져 오려면 다음과 같이 설정에서 구성 태그를 설정할 수 있습니다.

git config remote.origin.tagopt --tags

문서에서 :

이 값을 --no-tags로 설정하면 remote에서 가져올 때 자동 태그 추적 기능이 비활성화됩니다. --tags로 설정하면 원격 분기 헤드에서 도달 할 수없는 경우에도 remote에서 모든 태그를 가져옵니다. 이 플래그를 git-fetch (1)에 직접 전달하면이 설정을 무시할 수 있습니다. git-fetch (1)의 옵션 --tags 및 --no-tags를 참조하십시오.


1
문제는 더 '푸시'지향적이었습니다. 리모컨으로 푸시 할 때도 대답이 적용됩니까?
a1an
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.