현재 Pro Git a를 읽고 Git 사용 방법을 배우고 있습니다. >. 지금은 분기와 태그에 대해 배우고 있습니다. 제 질문은 언제 분기를 사용해야하고 언제 태그를 사용해야합니까?
예를 들어 프로젝트 1.1 버전에 대한 분기를 생성한다고 가정 해 보겠습니다. 이 버전을 완료하고 릴리스 할 때 릴리스 버전을 표시하기 위해 브랜치를 떠나야합니까? 아니면 태그를 추가해야합니까? 태그를 추가하면 버전 브랜치를 삭제해야합니다 (마스터 또는 다른 브랜치에 병합되었다고 가정). )?
답변
요약 : 모범 사례는 분기하고 자주 병합하며 항상 동기화 상태를 유지하는 것입니다 .
마스터 브랜치와 별도의 브랜치에 코드를 유지하는 데는 매우 명확한 규칙이 있습니다.
- 대규모 또는 파괴적인 변경을 구현하려고합니다.
- 사용하지 않을 수있는 변경 작업
- 작동할지 확실하지 않은 작업을 실험하고 싶습니다.
- 분기하라는 지시를 받으면 다른 사람들이 마스터에서해야 할 일이있을 수 있습니다.
일반적인 규칙은 분기 후이므로 마스터와 동기화해야합니다. 분기. 결국 마스터로 다시 병합해야하기 때문입니다. 다시 병합 할 때 복잡하고 복잡한 충돌을 피하려면 자주 커밋하고 자주 병합해야합니다.
따라야 할 모범 사례
Vincent Driessen 의 div> 성공적인 Git 분기 모델 에는 좋은 제안이 있습니다. 이 분기 모델이 마음에 들면 git에 대한 흐름 확장 을 고려하세요. 다른 사람들은 흐름에 대해 주석을 달았습니다 .
태그 관행
이미 알고 있듯이 Git은 1.0과 같은 커밋 식별자를 제공합니다. -2-g1ab3183하지만 태그가 아닙니다! 태깅은 git 태그로 수행되며 git 태그를 사용하여 생성 된 태그는 git describe 생성하는 커밋 식별자의 기반이됩니다. 다시 말해, Git에서는 브랜치에 태그를 지정하지 않습니다. 커밋에 태그를 지정하는 것입니다. 태그가 커밋에 대한 주석이 달린 포인터라고 말하는 것이 옳습니다.
이를 시연 한 실제 예제를 살펴 보겠습니다.
/-- [v1.0] v ---.---.---.---S---.---A <-- master \ \-.---B <-- test
커밋 “S”가 “v1.0″태그로 지정되도록합니다. 이 커밋은 “master”분기와 “test”분기 모두에 있습니다. 커밋 상단에서 " git describe "를 실행하는 경우 ” A “(“마스터 “브랜치의 상단)는 v1.0-2-g9c116e9
와 같은 것을 얻을 수 있습니다. 커밋 “B”(일명 “test”브랜치) 위에서 " git describe "를 실행하면 v1.0-2-g3f55e41
, 이는 기본 git-describe 구성의 경우입니다. 이 결과는 약간 다릅니다. v1.0-2-g9c116e9
는 정렬 된 SHA-1 ID가 9c116e9
인 커밋 중임을 의미하며 v1.0
. 태그가 없습니다. v1.0-2
!
태그가 “master”브랜치에만 표시되도록하려면 새 커밋을 만들 수 있습니다 (예 : 업데이트 기본값 / 대체 GIT-VERSION-FILE의 버전 정보) “test”분기의 분기 지점 이후. 예를 들어 “test”브랜치에 커밋을 태그하면 “v1.0.3`은”test “에서만 볼 수 있습니다.
참조
배워야 할 유용한 블로그와 게시물을 많이 찾았습니다. 그러나 전문적으로 설명 된 것은 드문 경우입니다. 따라서 @nvie의 성공적인 Git 분기 모델 게시물을 추천하고 싶습니다. 그의 일러스트레이션을 빌 렸습니다. 🙂
댓글
- 1.0-2-g1ab3183 은 git에서 사용할 수있는 정보에서 git describe에 의해 생성 된 식별자이지만 git 식별자라고 부르는 것은 너무 많은 일입니다. Git은 SHA 해시로 식별합니다. 태그와 분기는 git이 추적하는 데 도움이되는 인간 구조입니다. 따라서 태그를 만드십시오. 누군가가 언젠가는 커밋에 대한 편리한 북마크를 찾고 싶어 할 것이라고 생각할 때.
- git 유니버스의 다차원성에 대한 멋진 그림입니다. 아름답습니다. 감사합니다
- 많은 프로젝트에 일부 이 다이어그램에 표시된 차선의 일부 프로젝트는 여기서 개발 및 기능이라고하는 ' 만 필요합니다. 이는 마음대로 배포 할 수있는 웹 앱의 경우 종종 해당됩니다.
- git flow의 작성자조차도 웹 개발과 같은 많은 프로젝트 유형에 더 이상 권장하지 않습니다. 많은 사람들은 대부분의 프로젝트가 필요로하는 것보다 훨씬 더 복잡하다고 생각하여 실행하기가 번거롭고 잘못되기 쉽습니다.스펙트럼의 다른 쪽 끝에서 일부 고급 실무자 옹호 팀은 브랜치를 거의 사용하지 않는 ' 트렁크 기반 개발 '을 사용합니다. 그런 성공적인 프로젝트를 제공합니다. 중급의 경우 " anti-gitflow '
답변
을 고려하세요. h2>
동시에 두 가지 버전의 저장소가있는 경우 브랜치가 사용됩니다. 태그는 저장소에서 특정 시점을 표시하는 방법입니다.
출시 된 버전을 표시하려면 태그를 추가해야합니다. 그런 다음 해당 릴리스에 대한 버그를 수정해야하는 경우 태그에 분기를 만듭니다.
HEAD [또는 다른 분기]에 다시 병합 된 분기 만 삭제하려고합니다.
p>
코멘트
- 오 … 그리고 브랜치가 마스터와 같은 다른 브랜치로 병합된다는 것을 의미한다고 가정합니다. HEAD는 체크 아웃 할 때마다 이동합니다.
- HEAD는 일반적으로 브랜치를 가리 키므로 (' 분리 된 HEAD 모드에 있지 않는 한) HEAD는 가리키는 분기