버전 관리를 위해 태그와 릴리스 / 베타 분기를 사용해야하는 이유는 무엇입니까?


114

나는 약 1 년 동안 git을 사용해 왔으며 다른 버전에서 커밋에 태그를 지정하는 데 태그를 사용하고 싶습니다. 태그 작업에 사용할 명령에 대한 많은 정보를 찾았지만 제가 알고 싶은 것은라는 새 분기를 만들 수 1.1.0있고 전체적으로 마음을 흐리게 할 필요가 없다면 태그 지정을 사용하는 이유 입니다. 새로운 git 명령 세트?

브랜치보다는 태깅에 대한 많은 좋은 이유가 있어야하지만 그 장점이 무엇인지 알고 싶습니다.

답변:


96

태그는 주로 커밋에 태그를 지정하여 프로젝트의 특정 버전에 대한 향후 참조에 사용됩니다. 물론 항상 브랜치를 사용할 수 있지만 버전을 많이 변경하면 사용하지 않거나 거의 사용하지 않는 브랜치가 많이 생깁니다.

실제로 태그는 어쨌든 분기가없는 분기이며 복잡성을 줄이기 위해 프로젝트의 특정 버전을 참조하는 방법을 추가하는 것입니다.

편집 : 다음 은 모든 프로젝트에 사용하는 git을 사용하는 좋은 방법입니다.


훗 (: 그것은 큰 흐름은 정말 그 커버 가능한 모든 솔루션을 제공합니다.
하칸 Deryal

예, 나는 nvie 방법을 전에 보았고 그것에 상당히 당황했습니다. 그럼에도 불구하고 나는 그것을 이해하면 그것을 구현하고 싶다. 태그를 사용하면 실수로 코드를 변경하고 커밋 할 수 없으며 여전히 동일한 버전을 유지할 수 있습니다. 분기를 사용하면 실수로 발생할 수 있습니다. 태그는 릴리스를 표시하는 더 안전한 방법 인 것 같습니다.
wufoo

2
저에게 nvie 방법의 장점은 처음에는 이해할 필요가 없다는 것입니다. 원하는 작업에 대한 섹션을 찾아서 명령을 입력 할 수 있습니다. 몇 번이 지나면 자연스럽게되었고 며칠 동안 나는 프로처럼 나뭇 가지에서 춤을 추고 있었다!
Killroy

맹목적으로 적용하여 gitflow 접근 방식을 이해하기를 희망하면 상황에 적용 할 수있는 모든 단순화를 놓칠 수 있습니다. 그리고 gitflow는 실제로 대부분의 팀에게 부적절합니다. 지나치게 복잡하거나 지나치게 단순합니다.
toolforger

151

태그는 변경할 수 없습니다 .

"1.0.0"이라는 이름의 브랜치를 만들 수있는 반면, 사용자 또는 커밋 권한이있는 사람은 해당 브랜치로 푸시 (고의적이든 아니든)하고 1.0.0의 의미를 변경할 수도 있습니다.

태그를 생성하면 태그를 사용할 수 없습니다. 그게 다입니다. 태그 1.0.0은 정확히이를 의미하며 변경할 수 없습니다 * .

이것이 태그와 브랜치의 주요 실질적인 차이점입니다.

* 태그를 삭제하고 다시 생성하여 태그를 변경할 수 있지만 실수로 인한 것은 아닙니다.


18

저는 태그 분기를 모두 통합하는 워크 플로를 사용하는 경향이 있습니다 . 태그는 릴리스 된 코드 또는 주목할만한 개발 빌드를 표시하는 데 유용합니다. 분기는 특정 버전과 관련된 모든 변경 사항을 추적하는 데 유용합니다.

다음은 이러한 유형의 워크 플로에 대한 좋은 글입니다. http://nvie.com/posts/a-successful-git-branching-model/


18

브랜치와 태그는 동일합니다 (커밋에 대한 포인터, 일명 "ref" ). 단, 브랜치는 자동으로 다음 커밋으로 이동하고 태그는 동일한 커밋에서 영원히 1로 유지됩니다 .

릴리스를 만들 때 일반적으로 해당 릴리스가 빌드 된 코드의 "스냅 샷"을 표시하고 코드를 계속 발전시키는 동안에도 그대로 표시되기를 원하므로 태그를 사용합니다.

이를 위해 브랜치를 사용하려고 시도하면 의도 치 않게 릴리스가 빌드 되지 않은 다른 커밋으로 이동할 수 있습니다.


1 물론 태그를 삭제하지 않는 한.

참고 : 이것이 오래된 질문이라는 것을 알고 있지만 브랜치와 태그 간의 유사성 (및 하나의 중요한 차이점)이 다른 답변에서 가능한 한 명확하게 구체화되지 않았다고 느꼈습니다.


@downvoter 님, 반대 투표에 대한 구체적인 이유가 있습니까?
Branko Dimitrijevic 2016

나는 당신의 대답에 반대 투표를하지 않았지만“분기가 자동으로 다음 커밋으로 이동한다”는 의미는 무엇입니까? 브랜치는 커밋으로 자동 이동하지 않습니다. 실행 git commit하면 체크 아웃 된 브랜치의 헤드가 새 커밋을 참조하도록 업데이트되지만 다른 브랜치는 "자동으로"다음 커밋으로 이동하지 않습니다. 답변의 첫 번째 단락을 명확히해야합니다.
칫솔

1
@Toothbrush 물론, 그것이 "자동 이동"이라는 뜻입니다. 그러나 브랜치는 실제로 어떤 커밋도 "소유"하지 않고, 커밋 세트를 가리 키지도 않고, 단지 하나의 커밋을 가리 킵니다 (그리고 나머지는 커밋 그래프를 따라 가면서 때때로 부정확하게 암시 될 수 있습니다). git에서 branch는 .git\refs\heads커밋의 해시를 포함 하는 한 줄짜리 파일 입니다. 커밋은 자신을 생성 한 분기를 "기억"하지 않습니다. 예를 들어 브랜치 정보를 커밋의 메타 데이터에 기록 할 수있는 Mercurial과는 다릅니다.
Branko Dimitrijevic

예,하지만 많은 사람들이 그 사실을 모르고 있습니다. 특히 온라인에서 Git으로 작업하는 방법에 대해 제안 된 무수한 방법에 대해 혼란스러워하는 신규 이민자들은 더욱 그렇습니다.
칫솔

6

태그를 사용하여 기록에서 중요한 커밋을 기록합니다. "이것은 빌드 서버가 고장 났을 때 비오는 목요일에이 버전에 사용한 정확한 커밋입니다." 태그 대신 브랜치를 사용하면 정확히 어떤 커밋을 사용했는지 알 수 없습니다. 해당 커밋에 대한 정확한 해시를 수동으로 기록하지 않는 한 "우리는이 브랜치 어딘가에 버전 1.1.0을 출시했습니다."라는 것만 알고 있습니다. 이것이 태그를 처음에 사용하는 이유입니다. :)


4
나는 그가 1.1.0이라는 브랜치를 만들고 더 이상 사용하지 않는 것을 의미했다고 생각하므로 프로젝트를 명명 된 버전으로 나타낼 것입니다.
Hakan Deryal

2

다른 답변 외에도 여기에 2 센트가 있습니다.

짧은 답변 : 릴리스 버전에 태그 사용

긴 답변 : 특히 릴리스 버전 관리에 태그를 사용하는 것이 분기를 사용하는 것보다 낫다고 생각합니다. 릴리스를 업데이트해야하는 경우 태그가 지정된 커밋에서 분기하고 해당 분기 (대부분 핫픽스 분기)에서 작업을 마친 후 새 버전으로 새 분기의 헤드에 새 태그를 만듭니다. 그런 다음 소스 코드에 다시 병합해야하는 핫픽스가 아닌 이상 릴리스 버전을 변경해서는 안되므로 해당 분기를 마스터 / 개발로 다시 병합합니다. 그런 다음 더 이상 필요하지 않으므로 해당 분기를 삭제하십시오. 새 버전에 다른 핫픽스를 적용해야하는 경우 동일한 단계를 반복하십시오.

핫픽스를 작성자의 Git 워크 플로와 병합하는 방법을 보여주는 다음 문서의 섹션 ( https://hackernoon.com/a-branching-and-releasing-strategy-that-fits-github-flow-be1b6c48eca2)을 참조하세요.

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