bestsource

태그는 Git 브랜치와 어떻게 다릅니까?여기 어떤 걸 쓰면 좋을까요?

bestsource 2023. 4. 19. 23:20
반응형

태그는 Git 브랜치와 어떻게 다릅니까?여기 어떤 걸 쓰면 좋을까요?

에서 태그와 브랜치를 사용하는 방법을 잘 모르겠습니다.

현재 버전의 코드를 에서 으로 옮긴 지 얼마 안 되어 특정 기능을 위한 코드의 서브셋을 작성하려고 합니다.다른 개발자도 몇 명 있지만, 그룹의 모든 개발자가 이 기능에 관심을 가지는 것은 아닙니다.브랜치를 작성해야 합니까, 아니면 태그를 작성해야 합니까?어떤 상황에서 둘 중 하나를 사용해야 합니까?

이론적 관점에서 보면:

  • 태그특정 리비전의 심볼 이름입니다.항상 같은 오브젝트(보통 같은 리비전)를 가리키며 변경되지 않습니다.
  • 브랜치는 개발 라인을 나타내는 상징적 이름입니다.분기 상단에 새 커밋이 생성됩니다.분기 포인터는 새로운 커밋과 새로운 커밋을 가리키며 자연스럽게 진행됩니다.

기술적 관점에서 보면:

  • 태그가 상주하다refs/tags/네임스페이스는 태그 객체(주석된 태그 및 옵션 GPG 서명 태그)를 가리킬 수도 있고 직접 객체를 커밋할 수도 있으며(로컬 이름에 사용되는 경량 태그가 적음), 매우 드문 경우 트리 객체 또는 BLOB 객체(예: GPG 서명)를 가리킬 수도 있습니다.
  • 지점은 에 있다.refs/heads/네임스페이스, 커밋 오브젝트만을 가리킬 수 있습니다.HEAD포인터는 브랜치(심볼릭 참조)를 참조하거나 커밋(HEAD 또는 이름 없는 브랜치)을 직접 참조해야 합니다.
  • 리모트 스위칭브런치 위치refs/remotes/<remote>/및 브랜치를 .<remote>.

gitglossary manpage를 참조하십시오.

분점

브런치(branch)는 적극적인 개발 라인입니다.브랜치에서의 최신 커밋을 브랜치 끝이라고 부릅니다.브런치 끝은 브런치헤드에 의해 참조되며 브런치에서의 추가 개발이 이루어짐에 따라 앞으로 이동합니다.단일 git 저장소는 임의의 수의 브랜치를 추적할 수 있지만 작업 트리는 그 중 하나('현재' 또는 '체크아웃' 브랜치)와 관련지어 HEAD가 그 브랜치를 가리킵니다.

태그

태그 또는 커밋 개체를 가리키는 참조입니다.헤드와 달리 태그는 커밋에 의해 변경되지 않습니다. 오브젝트가 는에 저장됩니다.$GIT_DIR/refs/tags/ [...]태그는 일반적으로 커밋 조상 사슬의 특정 포인트를 표시하기 위해 사용됩니다.

태그 오브젝트

다른 개체를 가리키는 참조를 포함하는 개체. 커밋 개체와 마찬가지로 메시지를 포함할 수 있습니다.또한 (PGP) 시그니처를 포함할 수도 있습니다.이 경우 시그니처는 "signed tag object"라고 불립니다.

태그는 한 번에 특정 브랜치의 버전을 나타냅니다.브랜치는 동일한 코드베이스에서 다른 개발 작업과 동시에 실행될 수 있는 개별 개발 스레드를 나타냅니다.브런치에 대한 변경은 최종적으로 다른 브런치로 통합되어 통합될 수 있습니다.

보통 특정 버전에 태그를 붙여서 다시 만들 수 있습니다. 예를 들어, 이것이 XYZ Corporation에 출하된 버전입니다.브랜치란 특정 버전의 코드에 대한 지속적인 업데이트를 제공하는 동시에 해당 코드에 대한 개발을 계속하는 전략에 가깝습니다.제공된 버전의 브랜치를 만들고 메인 라인에서 개발을 계속하지만 제공된 버전을 나타내는 브랜치에 버그를 수정합니다.최종적으로, 이러한 버그 수정을 메인 라인에 Marge 합니다.대부분의 경우 분기 및 태그 부착을 함께 사용합니다.또, 메인 라인과 그 브랜치 양쪽에 적용되는 다양한 태그가 있습니다.이 태그는, 각 브랜치 마다 재작성하는 특정의 버전(고객에게 전달되는 버전 등)을 마크 합니다.배송, 버그 진단 등입니다.

사실 이것보다 더 복잡하거나 만들고 싶은 만큼 복잡합니다만, 이 예들은 차이를 보여 줍니다.

완벽한 비유는 없지만 저장소는 프로젝트의 진행 상황을 기록한 책이라고 생각할 수 있습니다.

나뭇가지

브랜치는 다음 스틱북마크 중 하나로 생각할 수 있습니다.

여기에 이미지 설명 입력

완전히 새로운 저장소에는 다음 중 하나의 저장소만 있습니다. main최신 페이지(commit이라고 생각)로 자동 이동합니다.그러나 책의 다른 관심 지점을 표시하기 위해 더 많은 북마크를 자유롭게 만들고 사용할 수 있으므로 북마크로 빠르게 돌아갈 수 있습니다.

특정 북마크를 든지 책의 할 수 .git-reset(예를 들어), 일반적으로 관심 지점은 시간에 따라 달라집니다.

태그

태그는 챕터 제목으로 생각할 수 있습니다.

북마크

제목(주석이 달린 태그를 생각할 수 있음)을 포함할 수도 있고 포함하지 않을 수도 있습니다.태그는 나뭇가지와 비슷하지만 다른 점이 있어 책에서 역사적 관심의 지점을 표시한다는 점이다.이력의 측면을 유지하기 위해서, 태그를 공유(공유 리모트에 푸시)한 후에는, 그 태그를 책내의 다른 장소로 이동하지 말아 주세요.

CVS에서 얻을 수 있는 것은 브런치를 셋업할 때 디렉토리를 작성할 필요가 없다는 것입니다.
더 이상 "스티키 태그" 또는 "브런치 태그"가 없습니다.
브랜치와 태그는 Git에서 두 개의 다른 오브젝트로 항상 모든 repo에 적용됩니다.

(이번 SVN을 통해) 더 이상 저장소를 명시적으로 구성할 필요가 없습니다.

branches
   myFirstBranch
     myProject
       mySubDirs
   mySecondBranch
     ...
tags
   myFirstTag
     myProject
       mySubDirs
   mySecondTag
   ...

이 구조는 CVS가 버전 시스템이 아닌 리비전 시스템이라는 사실에서 비롯됩니다(소스 제어 vs. 참조). 리비전 컨트롤?)
, , SVN의 , SVN의 디렉토리 카피, SVN의 태그를 .

태그를 체크 아웃하고 태그에서 작업을 시작하는 데 익숙하다면 질문은 의미가 있습니다.
안 되는 것
태그는 불변의 콘텐츠를 나타내도록 되어 있으며, 매번 동일한 콘텐츠를 얻을 수 있는 보증이 있는 경우에만 사용됩니다.

Git에서 수정 이력은 일련의 커밋으로 그래프를 형성합니다.
은 그 의 한 입니다.

x--x--x--x--x # one branch
    \ 
     --y----y # another branch
       1.1
        ^
        |
        # a tag pointing to a commit
  • 태그를 체크 아웃 하는 경우는, 브랜치를 작성해 작업을 개시할 필요가 있습니다.
  • 브런치를 체크아웃하면 최신 커밋을 직접 볼 수 있습니다).그 지점의 HEAD').

자세한 내용은 Jakub Narkibski의 답변을 참조해 주십시오.그러나, 이 시점에서는, (아직은) 자세한 것은 필요 없습니다.

요점은 태그는 커밋에 대한 단순한 포인터이기 때문에 그 내용을 변경할 수 없다는 것입니다.나뭇가지가 필요해요.


고객의 경우, 각 개발자는 특정 기능을 사용하고 있습니다.

  • 각각의 저장소에 독자적인 브런치를 작성해야 합니다.
  • 동료의 저장소(같은 기능을 사용하는 저장소)에서 지사를 추적합니다.
  • 동료들과 작업을 공유하기 위해 당기기/당기기

동료의 지사를 직접 추적하는 것이 아니라, 모든 사람이 자신의 작업을 수행하는 하나의 "공식" 중앙 저장소의 지점만 추적하여 이 특정 기능을 위한 모든 작업을 통합하고 공유할 수 있습니다.

나뭇가지들은 나무로 만들어지고 나무의 줄기에서 자라요.태그는 나무에서 파생된 종이로 만들어져 크리스마스 장식품처럼 트리 곳곳에 걸려 있다.

프로젝트는 트리로, 프로젝트에 추가할 기능은 브랜치로 커집니다.정답은 지점입니다.

저는 지점을 목적지로 생각하고 태그목적지로 생각합니다.

태그는 버전릴리즈 등 과거의 특정 중요 포인트의 북마크와 같은 느낌입니다.

분기는 특정 경로인 반면, 프로젝트는 다운되기 때문에 분기 마커가 함께 진행됩니다.완료되면 분기(마커)를 병합/삭제합니다.물론 이 시점에서 그 커밋에 태그를 붙일 수 있습니다.

태그가 읽기 전용 브랜치로 기능하는 것이 가장 좋은 설명인 것 같습니다.브랜치를 태그로 사용할 수 있지만 실수로 새 커밋으로 업데이트할 수 있습니다.태그는 존재하는 한 반드시 같은 커밋을 가리킵니다.

태그는 서명 또는 비서명하나이며 브랜치는 서명되지 않습니다.

서명된 태그는 특정 커밋에 암호화(서명 포함)되어 있기 때문에 이동할 수 없습니다.서명되지 않은 태그는 바인딩되지 않으며 태그를 이동할 수 있습니다(그러나 태그 이동은 일반적인 사용 사례가 아닙니다).

브랜치는 다른 커밋으로 이행할 수 있을 뿐만 아니라 이행할 것으로 예상됩니다.지역 개발 프로젝트에는 지점을 사용해야 합니다.Git 저장소에 "태그에" 작업을 커밋하는 것은 말이 되지 않습니다.

간단한 답은 다음과 같습니다.

branch: 현재 분기 포인터는 저장소에 대한 커밋마다 이동합니다.

그렇지만

tag: 태그가 가리키는 커밋은 변경되지 않습니다.실제로 태그는 그 커밋의 스냅샷입니다.

Git Parable은 일반적인 DVCS가 어떻게 만들어지고 그 제작자들이 왜 그렇게 했는지 설명한다.또한, Git for Computer Scientist를 보는 것이 좋을지도 모릅니다. Git의 각 오브젝트의 종류(브랜치나 태그 포함)에 대해 설명합니다.

태그는 버전을 표시하기 위해 사용됩니다. 구체적으로는 브랜치 상의 특정 시점을 참조합니다.일반적으로 분기는 프로젝트에 기능을 추가하는 데 사용됩니다.

심플:

태그는 항상 같은 버전의 프로젝트를 가리키고 헤드는 개발이 진행됨에 따라 진행되어야 합니다.

Git 사용자 설명서

사용하고 있습니다

  • branches dev bug fix(기능 개발 또는 버그 환경)
  • lightweight tags★★★★★★★★★★★★★★★★의 경우test, 기능 브랜치에서의 환경
  • annotated tags의 경우/prd(메인브런치)의 경우

주석이 달린 각 태그 뒤에 모든 기능이 메인 브랜치에서 기본 재배치됩니다.

남들이 말하듯이branch, 「중요한」입니다.head새로운 커밋이 도착하면 앞으로 이동합니다.이것은 기능 개발에 이상적입니다.

Lightweight tag는 특정 커밋에 고정되어 있기 때문에 내부 버전을 작성하고 개발 완료 후 QA 팀이 기능을 테스트하는 것이 이상적입니다.

Annotated tag는 테스트 대상 기능 브랜치를 메인 브랜치(메인)에 Marge 할 때 정식 메시지 및 기타 주석을 추가할 수 있기 때문에 실제 가동으로의 릴리스에 이상적입니다.

Git을 통한 릴리스 관리

github의 neovim:

v0.3은 브런치입니다.

v0.3.1 ...v0.3.4 ...는 태그입니다.

여기에 이미지 설명 입력

nightly and stable은 분기가 아닌 태그이다

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/1457103/how-is-a-tag-different-from-a-branch-in-git-which-should-i-use-here

반응형