카테고리 보관물: Git

Git

Git의 태그와 다른 점은 무엇입니까? 여기서 어느 것을 사용해야합니까? 있습니다 .자식. 방금

태그분기 를 사용하는 방법을 이해하는 데 어려움이 있습니다 ..

방금 코드의 현재 버전을 이제 특정 기능을 위해 해당 코드의 하위 집합을 작업 할 것입니다. 다른 개발자들도이 작업을 수행 할 것입니다. 그러나 우리 그룹의 모든 개발자가이 기능에 관심을 갖지는 않습니다. 지점이나 태그를 만들어야합니까? 어떤 상황에서 하나를 사용해야합니까?



답변

태그는 한 순간 특정 지점의 버전을 나타냅니다. 분기 와 동일한 코드베이스에 다른 개발 노력과 동시에 실행할 수 있습니다 개발의 별도의 스레드를 나타냅니다. 지점에 대한 변경 사항은 결국 다른 지점으로 병합되어 통합 될 수 있습니다.

일반적으로 특정 버전에 태그를 지정 하여 다시 만들 수 있습니다. 예를 들어 XYZ Corp에 제공 한 버전 입니다. 지점는 코드의 개발을 계속하면서 특정 버전의 코드에 대한 지속적인 업데이트를 제공하는 전략입니다. 전달 된 버전의 브랜치를 만들고 메인 라인에서 개발을 계속하지만 전달 된 버전을 나타내는 브랜치에 버그를 수정합니다. 결국이 버그 수정을 기본 라인으로 다시 병합합니다. 종종 분기와 태그를 함께 사용합니다. 배달, 버그 진단 등을 위해 다시 만들려는 각 지점을 따라 메인 라인과 특정 버전 (예 : 고객에게 배달 된 버전)을 표시하는 지점에 모두 적용 할 수있는 다양한 태그가 있습니다.

실제로 이보다 더 복잡하거나 원하는만큼 복잡하지만이 예제는 차이점에 대한 아이디어를 제공해야합니다.


답변

로부터 이론적 관점 :

  • 태그 는 주어진 개정에 대한 상징적 인 이름입니다 . 그것들은 항상 같은 객체를 가리킨다 (보통 : 동일한 개정판을 가리킨다). 그들은 변하지 않습니다.
  • 브랜치개발 라인의 상징적 이름입니다 . 브랜치 위에 새로운 커밋이 생성됩니다. 분기 포인터는 자연스럽게 진행되어 새로운 커밋을 나타냅니다.

로부터 기술적 관점 :

  • 태그refs/tags/네임 스페이스에 상주하며 태그 객체 (주석이 있거나 선택적으로 GPG 서명 태그)를 가리 키 거나 객체를 직접 커밋 (로컬 이름에 사용되는 경량 태그가 거의 없음)하거나 아주 드물게 트리 객체 또는 BLOB 객체를 가리킬 수도 있습니다 (예 : GPG 서명)를 가리킬 수 있습니다. ).
  • 브랜치refs/heads/네임 스페이스에 상주하며 객체커밋하는 것만 가리킬 수 있습니다 . 그만큼HEAD포인터 분기 (심볼 참조) 또는 직접 커밋 (또는 분리 HEAD 이름 점)을 참조한다.
  • 원격 추적 분기refs/remotes/<remote>/네임 스페이스에 있으며 원격 저장소에서 일반 분기를 따릅니다 <remote>.

gitglossary 맨 페이지를 참조하십시오 .

분기

“분기”는 활발한 개발 라인입니다. 지점에서 가장 최근의 커밋을 해당 지점의 팁이라고합니다. 브랜치의 팁은 브랜치 헤드에서 참조되며, 브랜치 헤드에서 추가 개발이 완료되면 앞으로 나아갑니다. 단일 자식 저장소는 임의의 수의 분기를 추적 할 수 있지만 작업 트리는 그 중 하나 ( “현재”또는 “체크 아웃 된”분기) 와만 관련되며 HEAD는 해당 분기를 가리 킵니다.

꼬리표

태그 또는 커밋 객체를 가리키는 참조입니다. 헤드와 달리, 커밋에 의해 태그가 변경되지 않습니다. 태그 (태그 객체가 아님)는에 저장됩니다 $GIT_DIR/refs/tags/. […]. 태그는 가장 일반적으로 확약 체인에서 특정 지점을 표시하는 데 사용됩니다.

태그 객체

커밋 객체처럼 메시지를 포함 할 수있는 다른 객체를 가리키는 참조를 포함하는 객체. 또한 (PGP) 서명을 포함 할 수 있으며이 경우 “서명 된 태그 객체”라고합니다.


답변

리포지토리를 프로젝트 진행 상황을 기록한 책으로 생각하면 …

지점

브랜치를 끈적 끈적한 책갈피 중 하나로 생각할 수 있습니다 .

여기에 이미지 설명을 입력하십시오

새로운 리포지토리에는 master최신 페이지로 자동으로 이동하는 저장소 중 하나만 있습니다 ( 커밋 생각) 사용자가 작성한 )로 . 그러나 책에서 다른 관심 지점을 표시하기 위해 더 많은 책갈피를 작성하고 사용할 수 있으므로 책갈피로 빠르게 돌아갈 수 있습니다.

또한 언제든지 특정 북마크를 책의 다른 페이지로 이동할 수 있습니다 ( git-reset 예 :). 관심 지점은 일반적으로 시간이 지남에 따라 다릅니다.

태그

태그를 장 제목 으로 생각할 수 있습니다 .

북마크

제목을 포함하거나 ( 주석이있는 태그 생각 ) 포함하지 않을 수 있습니다. 태그는 책에 대한 역사적 관심 지점을 표시한다는 점에서 분기와 유사하지만 다릅니다 . 기록적인 측면을 유지하기 위해 태그를 공유 한 후 (즉, 공유 리모콘으로 푸시 한 경우) 책의 다른 위치 이동 해서는 안됩니다 .


답변

CVS에서 오는 것은 브랜치를 설정할 때 더 이상 디렉토리를 만들지 않는다는 것 입니다.
더 이상 “sticky tag”(하나의 파일에만 적용 할 수 있음) 또는 “branch tag”가 없습니다.
Git에서 브랜치와 태그는 서로 다른 두 객체이며 항상 모든 리포지토리에 적용됩니다 .

더 이상 (이번 SVN으로) 저장소를 명시 적으로 구성하지 않아도됩니다.

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

이 구조는 CVS가 버전 시스템 이 아니라 개정 시스템 이라는 사실에서 비롯 됩니다 ( 소스 제어와 개정 제어? 참조 ).
이는 브랜치가 SVN의 디렉토리 사본 인 CVS의 태그를 통해 에뮬레이트됨을 의미합니다.

태그를 체크 아웃하고 작업을 시작하는 데 익숙하다면 질문이 의미가 있습니다 .
😉
태그는 불변 을 나타내는 것으로 간주됩니다. 컨텐츠 매번 동일한 컨텐츠를 얻을 수 있도록 보장하여 액세스하는 데만 사용됩니다.

Git에서 수정 내역은 일련의 커밋으로 그래프를 형성합니다.
분기는 해당 그래프의 한 경로입니다

x--x--x--x--x # one branch
    \
     --y----y # another branch
       1.1
        ^
        |
        # a tag pointing to a commit
  • 태그를 체크 아웃하면 지점을 생성하여 작업을 시작해야합니다.
  • 지점을 체크 아웃하면 해당 지점의 최신 커밋 지점 ( ‘HEAD’)이 바로 표시됩니다.

참조 야쿱 Narębski의 답변을모든 기술에 을 . 그러나 솔직히이 시점에서 모든 세부 사항이 필요하지는 않습니다.

요점은 다음과 같습니다. 태그는 커밋에 대한 간단한 포인터이므로 내용을 수정할 수 없습니다. 지점이 필요합니다.


귀하의 경우 각 개발자는 특정 기능을 수행합니다.

  • 각각의 저장소에 자신의 지점을 만들어야합니다
  • 동료의 저장소 (같은 기능을 수행하는 저장소)에서 분기를 추적합니다.
  • 동료와 작업을 공유하기 위해 당기기 / 밀기.

동료의 지점을 직접 추적하는 대신이 특정 기능에 대한 모든 사람의 작업을 통합하고 공유하기 위해 모든 사람이 자신의 작업을 추진하는 하나의 “공식적인”중앙 저장소의 지점 만 추적 할 수 있습니다.


답변

가지는 나무로 만들어지며 나무 줄기에서 자랍니다. 태그는 종이로 만들어졌으며 나무의 여러 곳에서 온 크리스마스 장식품처럼 매달립니다.

프로젝트는 트리이며 프로젝트에 추가 될 기능은 분기에서 커집니다. 답은 지사입니다.


답변

설명하는 가장 좋은 방법은 태그가 읽기 전용 분기로 작동한다는 것입니다. 브랜치를 태그로 사용할 수 있지만 실수로 새로운 커밋으로 업데이트 할 수 있습니다. 태그는 존재하는 한 동일한 커밋을 가리 키도록 보장됩니다.


답변

태그는 서명되거나 서명되지 않을 수 있습니다 . 지점은 서명되지 않습니다.

서명 된 태그는 특정 커밋에 대해 서명 방식으로 암호화되어 바인딩되어 있으므로 절대 이동할 수 없습니다. 서명되지 않은 태그는 바인딩되지 않으며 이동할 수 있지만 태그 이동은 일반적인 사용 사례가 아닙니다.

브랜치는 다른 커밋으로 이동할 수있을뿐만 아니라 그렇게 할 것으로 예상 됩니다. 지역 개발 프로젝트에 지점을 사용해야합니다. “태그에있는”Git 저장소에 작업을 커밋하는 것은 의미가 없습니다.