문제

끔찍한 질문 제목에 대해 정말 죄송하지만 좀 더 구두로 설명하려고 노력할 것입니다.

내 소프트웨어 프로젝트에 GIT (이 경우 특정 소프트웨어가 실제로 중요하지 않은 것 같아요)를 사용하고 있습니다. 많은 프로젝트만큼 다양한 릴리스를 계획하고 있습니다. 릴리스가 있으면 아마도 "1.0"과 같은 커밋 태그를 할당 할 것입니다. 시간이 지남에 따라 코드가 해킹되고 결국 다른 태그가있는 릴리스가 있습니다. 이번에는 "2.0"이 있습니다.

어느 날, 나는 심각한 버그를 발견했습니다. 그것은 1.0과 2.0 릴리스에 존재하며, 고정해야합니다. 일을 어렵게 만들기 위해 (그리고 아마도 더 현실적일 것입니다), 나는 현재 마스터/트렁크에서 그것을 고치고 모든 사람이 그것을 사용할 것이라고 가정 할 수는 없습니다. '업그레이드하고 싶다.

따라서 이런 종류의 행동을 지원하기 위해 좋은 계획은 무엇입니까? git은 태그를 어느 수준에서 릴리스와 동일시하는 것 같습니다. git describe 명령 ("[latest tag]-[commits since the tag]-[current commit hash]"). 아마도 태그 사용을 피할 수는 없습니다.

나는 태그와 가지의 조합이 좋은 생각이라고 생각할 수 있지만, 어떤 이유로 든 이것으로 세부 사항 주위에 머리를 감을 수는 없습니다.

도움이 되었습니까?

해결책

당신은 분명히 이것을 위해 분기를 사용하고 싶습니다. 이러한 유형의 개발을위한 GIT 지원 지점은 매우 잘입니다.

예를 들어, 선형 버전 기록이 다음과 같이 보일 수 있습니다.

---A---B---C[1.0]---D---E---F[2.0]---G---H

1.0에서 버그를 찾아 고정하려면 Commits C와 D 사이에 새로운 커밋을 단순히 삽입 할 수는 없습니다. 따라서 다음과 같은 지점을 만들 수 있습니다.

---A---B---C[1.0]---D---E---F[2.0]---G---H[2.1]
            \
             C1---C2[1.1]

C1 및 C2를 커밋합니다. 해당 브랜치의 문제를 수정하여 릴리스 1.1을 태그 할 수 있습니다. 이제 버전 2.1에서 변경을했다고 가정 해 봅시다. 당신이 사용할 수있는 git cherry-pick 다음을 수행하려면 :

---A---B---C[1.0]---D---E---F[2.0]---G---H[2.1]
            \
             C1---C2[1.1]---G1[1.2]

Commit G1은 버전 2.0 대신 버전 1.1 위에 적용 할 수있는 경우를 제외하고 Commit G와 관련이 있습니다.

이 예에서, 분기 (추가 개발 스트림)는 핵심 개념이며, 태그는 프로젝트가 특정 시점에있는 상태를 지칭 할 이름을 만드는 편리한 방법 일뿐입니다. GIT는 특히 강력한 분기를 조작하는 다른 많은 방법을 지원합니다. git rebase 명령.

다른 팁

분기가 필요합니다. 릴리스 태그에서 시작하는 지점에서 유지 보수 수정 및 릴리스를 수행하는 반면, 지속적인 개발은 메인 (마스터) 지점에서 계속됩니다.

지점과 태그를 언급 할 때 이미 대부분의 답변이있는 것 같습니다. 태그는 특정 (릴리스와 같은)을 표시하고 분기는 병렬 개발을위한 것입니다. 특정 버전의 유지 보수는 일반적으로 분기에서 수행되며 대부분의 현재 VC와 함께 CherryPick Changsets를 통해 주어진 버그 수정을 헤드/트렁크에서 지점으로 가져오고 그 반대로 가져올 수 있습니다.

헤드/트렁크/마스터 (현재 "현재"개발 지점이 무엇이든간에 해당)에서 작업하고 다양한 유지 보수 지점에서 버그 픽스를 병합 할 수 있습니다. 주요 릴리스 또는 사소한 릴리스가 완료 되 자마자 유지 보수를위한 지점을 만듭니다.

원하는 것을 달성하는 방법에는 여러 가지가 있습니다.

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