문제

나는 몇 가지 어려움을 이해하고 사용하는 방법 태그.

나는 그냥 이동의 현재 버전에서 코드 하기 , 고 지금 나에서 작업하기위 코드의 특정한 기능입니다.몇 가지 다른 개발자들에서 일하게 될 것입니다 이뿐만 아니지만,모든 개발자가에 우리의 그룹은 것이 특징이다.해야 나를 만드는 지점이나 태그?어떤 상황에서 해야 나를 사용하여 한 대 다른?

도움이 되었습니까?

해결책

꼬리표 특정 지점의 버전을 잠시 시간에 나타냅니다. ㅏ 나뭇가지 동일한 코드 기반의 다른 개발 노력과 동시에 실행될 수있는 별도의 개발 스레드를 나타냅니다. 분기에 대한 변경은 결국 다른 지점으로 병합되어 통일 될 수 있습니다.

보통 당신은 꼬리표 예를 들어 다시 만들 수 있도록 특정 버전 이것은 우리가 XYZ Corp에 배송 한 버전입니다. ㅏ 나뭇가지 특정 버전의 코드에 대한 지속적인 업데이트를 제공하면서 계속 개발하는 전략입니다. 전달 된 버전의 지점을 만들고 메인 라인에서 개발을 계속하지만 전달 된 버전을 나타내는 지점에 버그 수정을합니다. 결국,이 버그 수정을 메인 라인으로 다시 병합 할 것입니다. 종종 분기와 태그를 함께 사용합니다. 메인 라인에 적용 할 수있는 다양한 태그가 있으며, 각 지점을 따라 특정 버전 (예 : 고객에게 전달 된 것)을 표시 할 수있는 지점 (예 : 전달, 버그 진단 등).

그것은 실제로 이것보다 더 복잡하거나 당신이 그것을 만들고 싶은만큼 복잡하지만, 이러한 예는 차이점에 대한 아이디어를 제공해야합니다.

다른 팁

로부터 이론적 인 관점 :

  • 태그 주어진 상징적 이름입니다 개정. 그들은 항상 같은 대상을 가리 킵니다 (보통 : 같은 개정). 그들은 변하지 않습니다.
  • 가지 상징적 인 이름입니다 개발 라인. 새로운 커밋이 지점 위에 생성됩니다. 브랜치 포인터는 자연스럽게 발전하여 새롭고 새로운 커밋을 가리 킵니다.

로부터 전문인 관점 :

  • 태그 거주합니다 refs/tags/ 네임 스페이스, 가리킬 수 있습니다 태그 객체 (주석 및 선택적으로 GPG 서명 된 태그) 또는 직접 객체를 커밋하십시오 (로컬 이름에 사용되는 가벼운 태그가 적음) 또는 매우 드문 경우에도 트리 객체 또는 블롭 객체 (예 : GPG 서명).
  • 가지 거주합니다 refs/heads/ 네임 스페이스, 만 가리킬 수 있습니다 물체를 커밋합니다. 그만큼 HEAD 포인터는 분기 (상징적 참조) 또는 직접 커밋 (분리 된 헤드 또는 이름없는 지점)을 참조해야합니다.
  • 원격 트래킹 브랜치 거주합니다 refs/remotes/<remote>/ 네임 스페이스, 원격 저장소의 일반 분기를 팔로우하십시오 <remote>.

또한보십시오 gitglossary 맨 페이지 :

나뭇가지

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

꼬리표

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

태그 객체

커밋 객체와 같은 메시지를 포함 할 수있는 다른 객체를 가리키는 심판이 포함 된 객체. 또한 (PGP) 서명을 포함 할 수도 있으며,이 경우 "서명 된 태그 개체"라고합니다.

저장소를 프로젝트에서 진행하는 책으로 생각한다면 ...

가지

당신은 그 지점을 그 끈적 끈적한 중 하나라고 생각할 수 있습니다. 북마크:

enter image description here

새로운 저장소에는 그중 하나만 있습니다 ( master), 자동으로 최신 페이지로 이동합니다 (생각 저지르다) 당신은 썼습니다. 그러나 책에 다른 관심 지점을 표시하기 위해 더 많은 책갈피를 만들고 사용할 수 있으므로 빨리 돌아올 수 있습니다.

또한 항상 특정 북마크를 책의 다른 페이지로 이동할 수 있습니다 (사용 git-reset, 예를 들어); 관심 지점은 일반적으로 시간이 지남에 따라 다릅니다.

태그

태그를 다음과 같이 생각할 수 있습니다 챕터 제목.

bookmarks

제목이 포함될 수 있습니다 (생각 주석이 달린 태그) 또는 그렇지 않습니다. 태그는 비슷하지만 지점을 표시한다는 점에서 지점과 다릅니다. 역사적인 책에 대한 관심. 역사적 측면을 유지하기 위해 태그를 공유 한 후에 (즉, 공유 리모컨으로 푸시), 당신은해야합니다 책의 다른 곳으로 이동하십시오.

CVS에서 나오는 것은 더 이상 창조하지 않는다는 것입니다. 디렉토리 지점을 설정할 때.
더 이상 "스티커 태그"(하나의 파일에만 적용 할 수 있음) 또는 "분기 태그"가 없습니다.
분기와 태그는 git의 두 가지 다른 객체이며 항상 모두 레포.

이번에는 더 이상 (SVN과 함께) 다음과 함께 저장소를 명시 적으로 구조화 할 필요가 없습니다.

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

그 구조는 CVS가 a라는 사실에서 비롯됩니다 개정 시스템 버전 시스템이 아닙니다 (참조 소스 제어 대 개정 제어?).
즉, 분기는 CVS의 태그, SVN의 디렉토리 사본을 통해 에뮬레이션됩니다.

당신의 질문은 당신이 태그를 체크 아웃하는 데 익숙한 경우 감각을 만듭니다. 작업을 시작하십시오.
당신은하지 말아야 할;)
태그는 불변 컨텐츠, 매번 동일한 컨텐츠를 얻도록 보장하는 데만 액세스하는 데 사용됩니다.

GIT에서, 개정의 역사는 일련의 커밋으로 그래프를 형성합니다.
분기는 해당 그래프의 한 경로입니다

x--x--x--x--x # one branch
    \ 
     --y----y # another branch
       1.1
        ^
        |
        # a tag pointing to a commit
  • 태그를 체크 아웃하는 경우 태그 작업을 시작하려면 지점을 만들어야합니다.
  • 지점을 확인하면 해당 지점의 최신 커밋 ( '헤드')이 직접 표시됩니다.

보다 Jakub Narambski의 답변 모든 기술에 대해 솔직히 말해서이 시점에서는 모든 세부 사항이 필요하지 않습니다.)

요점은 다음과 같습니다. 태그는 커밋에 대한 간단한 포인터 인 것입니다. 콘텐츠를 수정할 수는 없습니다. 지점이 필요합니다.


귀하의 경우, 각 개발자는 특정 기능을 작업합니다.

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

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

가지는 나무로 만들어져 나무의 몸통에서 자랍니다. 태그는 종이 (나무의 파생물)로 만들어졌으며 나무의 여러 곳에서 크리스마스 장식품처럼 매달려 있습니다.

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

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

태그도있을 수 있습니다 서명 또는 서명되지 않았습니다; 지점은 서명되지 않습니다.

서명 된 태그는 암호화 적으로 (서명과 함께) 특정 커밋에 묶여 있기 때문에 결코 움직일 수 없습니다. 서명되지 않은 태그는 바인딩되지 않았으며 이동할 수 있습니다 (그러나 이동 태그는 일반적인 유스 케이스가 아닙니다).

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

비유 Git 는 방법에 대해 설명합적인 DVC 이 만들어지고 왜 그들의 제작자가 무엇을 했는지는 않았다.또한,할 수 있는 살펴보 Git 에 대한 컴퓨터 과학자;그것이 무엇인지 설명하는 각 개체의 유형에 Git 포함하여,가지고 태그가 있습니다.

나는 생각하고 싶다 가지 ~처럼 당신이가는 곳, 태그 ~처럼 당신이 있었던 곳.

태그는 버전 릴리스와 같은 과거에 특정 중요한 지점의 북마크처럼 느껴집니다.

지점이 특정 경로이지만 프로젝트가 내려오고 있으므로 분기 마커가 귀하와 함께 진행됩니다. 완료되면 분기를 병합/삭제합니다 (즉, 마커). 물론, 그 시점에서 당신은 그 커밋을 태그로 선택할 수 있습니다.

태그는 버전을 표시하는 데 사용됩니다.보다 구체적으로는 지점에서 시점을 참조합니다. 지점은 일반적으로 프로젝트에 기능을 추가하는 데 사용됩니다.

단순한:

태그는 항상 같은 버전의 프로젝트를 가리킬 것으로 예상되는 반면, 개발이 진행됨에 따라 헤드는 발전 할 것으로 예상됩니다.

git 사용자 설명서

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

분기 : 현재 브랜치 포인터는 모든 저장소에 커밋되면서 움직입니다.

하지만

태그 : 태그 포인트가 변경되지 않는 커밋. 실제로 태그는 해당 커밋의 스냅 샷입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top