GitHub에서 프로젝트 버전을 어떻게 제어해야합니까


13

나는 오늘날 GitHub에서 할 수있는 한 많은 시간을 ( 실제로 팀에서 일하는 유일한 사람이라 할지라도) 실제 기업 응용 프로그램에 대한 느낌을 느끼기 위해 노력 하고 있습니다.

내가 가진 질문 중 하나는 버전 을 제어하는 ​​것 입니다. 우리가 프로젝트를 시작했다고 가정 해 봅시다. 그런 다음 팀 구성원이 일부 지점을 만들어 개발했습니다. 생산 준비가되면 모든 지점을 master지점 과 병합했습니다 . 결국, 우리는 version으로 시작 1.0합니다.

이제 해당 버전 1.0이 작동 중이며 해당 소프트웨어 버전에 대해 일부 문제가 제기되었습니다. 1.1프로젝트를 서두르면서 도입 한 문제를 해결하기 위해 버전 개발을 시작하고 싶습니다 .

이제 문제는 이것입니다.

여기서 버전 관리를 어떻게 제어해야합니까?

소프트웨어 v1.0버전 1.0을 위한 새로운 브랜치를 생성 하고 유지하고 일부 브랜치에서 개발하거나 (또는 ​​그렇지 않은 경우) 통합하고 master버전 과 합병해야 1.1합니까?

그런 상황에 대한 협약이 있습니까?

답변:


19

나는 다음과 같은 지점 모델 을 발견하고 채택하기 시작했다 .

nvie.com의 이미지

(기사의 이미지)

이 기사에 설명 된 많은 모범 사례와 엄격한 규칙이 있으므로 강력히 권장합니다.

가볼만한 곳:

  • 마스터 브랜치는 버전을 태그하는 곳입니다. 여기서는 발전이 없습니다. 프로덕션에 배포 된 버그의 경우 핫픽스 분기의 버그를 수정하고 병합하여 새 버전에 태그를 지정합니다.
  • 개발은 기능 및 기능 분기에서 발생합니다. 개인적으로, devel 브랜치에서 기능을 수정하고 기능 브랜치에서 기능을 수행합니다.
  • 소프트웨어가 릴리스에 도달하기 시작하면 분기를 해제하기 위해 분기합니다. 릴리스 브랜치는 마지막으로 다루는 곳입니다. 범프 버전 번호, 메타 데이터 변경 등 사소한 버그 수정. 완료되면 마스터에 병합하고 태그를 지정하고 버전이라고 부릅니다.
  • 두 가지 주요 지점 : 마스터는 "신성한 지점"입니다. HEAD는 항상 최신 생산 코드이며 개발은 야간 분기입니다. HEAD는 항상 코드에 최신 (그러나 불안정한) 추가 사항을 반영합니다.

구체적인 경우 단계는 해당 버전이 얼마나 급한 지에 따라 다릅니다. 누락 된 기능이라면 개발 릴리스로 돌아가서 모든 작업을 다시 수행합니다. 배포 된 버전의 버그 인 경우 핫픽스 브랜치로 분기하여 버그를 수정하고 병합하여 v1.1 태그를 지정합니다. 둘 다인 경우 먼저 버그를 수정 한 다음 설명대로 기능을 두 번째로 추가합니다.


매우 유익하고 상세합니다. 또한 완벽한 연습. 또한 많은 의미가 있습니다. 자극을 마스터하면 유지 관리가 쉬워집니다. 브랜치 태그 (또는 커밋?)에 익숙하지 않습니다. 그것에 대해 좀 더 자세히 설명해 주시겠습니까? 위의 모델에 따라 어떻게 할 수 있습니까?
tugberk

1
git에서 태깅의 대상은 커밋입니다. "이 커밋이 있는데 지금부터 'v1.3'이라고 부릅니다." 실제로 이것은 마스터 브랜치로 전환하고 (현재 안정적인) 디벨 브랜치에서 병합하고 커밋하고 태그를 지정 함을 의미합니다. 그런 다음 모든 태그를 나열하고 지난 릴리스에서 생산 된 내용을 확인해야하는 경우 해당 코드로 되돌릴 수 있습니다. 태그보다 태그가 조금 더 있습니다 (리눅스 커널과 같은 대규모 분산 개발에 유용합니다). 관심이 있으시면 progit book을 추천합니다 .
Tamás Szelei

ProGit은 처음부터 확실히 읽을 책 중 하나입니다. 지금은 일을 끝내고 싶은 부분 만 읽고 있습니다. 지금까지 우리는 마스터 브랜치를 개발했으며이를 유지해야한다고 생각합니다. 그러나 위의 모델에 따라 다른 지사를 열고 지사로 production사용합니다 master.
tugberk

이 모델을 시험 해보고있는 동안, 내가 고투하고있는 한 가지는 : 주어진 기사, 기능 및 릴리스 분기에서 논의 된 일부 지원 분기가 있다는 것입니다. 여러 개의 미래 지점이있을 수 있습니다. 예를 들어 FeedbackForm은 미래의 지점이고 ContactForm은 다른 지점입니다. 이 모델은 괜찮을까요? 릴리스 지점도 여러 개 있어야합니까? 그렇다면 어떻게 이름을 지정해야합니까?
tugberk

우선, 당신은 그것을 편지에 따를 필요가 없습니다, 당신이 지키는 규칙을 설정하십시오. 자신과 팀 스타일에 가장 적합한 것을하십시오. 둘째, 하나의 기능과 하나의 릴리스로 단기 프로젝트를하지 않는 한 여러 기능 및 릴리스 분기가 정상입니다. 기사에 따르면 이름은 release- * 및 feature- *입니다. 릴리스의 별표 대신 미래 버전 번호를, 기능 분기의 경우 이슈 트래커 ID를 넣은 것 같습니다.
Tamás Szelei

1

내가 가장 많이 목격 한 것은 :

  • 마스터는 당신을위한 제품입니다. 결국 모든 향후 버전 x.0이 마스터가 될 것입니다.
  • 프로덕션에서 각 버전에 대한 태그 / 분기를 작성하여 필요한 모든 고객에 대해 해당 태그 / 분기를 계속 지원할 수 있습니다.
  • 둘 중 하나에서 수정 사항을 병합하는 것은 사례별로 처리하는 것입니다.

감사! v1.0이라는 이름의 브랜치를 유지하는 것이 합리적이라고 생각합니다. v1.2는 합리적입니까?
tugberk

해당 소프트웨어가 해당 버전에 존재하는 한 @tugberk는 특정 핫픽스 분기가 필요한 경우 분기를 신속하게 분기 할 수 있도록 분기를 유지하는 것이 좋습니다. 해당 버전에 소프트웨어가 더 이상 존재하지 않으면 (더 이상 지원되지 않으므로 더 이상 작업 할 수 없음) 분기의 최종 병합을 수행 한 다음 삭제하는 것이 좋습니다. "지점 XXXX 닫기"라고 말하면 마지막 빈 커밋을 만들 수도 있습니다 (지점 시작시 자주 수행)
Patrick Mevzek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.