우리 회사는 제품을 만들고 있습니다. SVN에서 버전을 지정할 예정입니다. 그것은 웹 응용 프로그램이므로 기본적으로 일부 기능이없는 버전이 없으므로 항상 베타로 표시 될 수 있습니다. 그러나 그것이 기업 제품이 될 것이기 때문에 나는 “불안정한 감시”를 원하지 않습니다. 어떻게 버전 관리를 하시겠습니까? 1.0은 안정적입니까? 빌드 날짜가 버전 번호 여야합니까? 너희들이 어떻게 생각하는지 말해줘!
답변
[ 메이저 ]. [ 마이너 ]. [ 릴리스 ]. [ 빌드 ]
전공 : 정말 마케팅 결정. 버전 1.0을 호출 할 준비가 되셨습니까? 회사는 고객이 더 많은 비용을 지불해야하는 주요 버전으로 간주합니까, 아니면 무료 일 수있는 현재 주요 버전의 업데이트입니까? R & D 결정이 적고 제품 결정이 더 많습니다.
minor : 메이저 가 증가 할 때마다 0에서 시작합니다 . 공개되는 모든 버전에 +1
출시 : 개발 마일스톤을 달성하고 내부적으로 (예 : QA로) 제품을 출시 할 때마다이를 늘리십시오. 이는 조직의 팀 간 커뮤니케이션에 특히 중요합니다. 말할 필요도없이, 동일한 ‘릴리스’를 두 번 (내부에서도) 해제하지 마십시오. minor ++ 또는 major ++에서는 0으로 재설정하십시오.
빌드 : SVN 개정이 될 수 있습니다.
내 현재 크롬 예 : 83.0.4103.61
답변
xyzg
g 단위의 증분이 불안정합니다. z의 (또는 RC) 증분은 안정적이며 버그 수정을 의미합니다.
y 단위의 증가는 안정적이며 새로운 기능을 의미합니다.
x 단위의 증가는 100 % 이전 버전과의 호환성없이 안정적이며 주요 릴리스입니다.
답변
한 번은 대규모 프로젝트를위한 정교한 “버전 관리 스타일 가이드”를 작성했습니다. 프로젝트를 구체화하지 못했지만 스타일 가이드는 여전히 온라인에서 사용할 수 있습니다 . 그것은 내 개인적인 의견 일 것입니다. 아마도 그것은 당신에게 도움이되거나 영감을 줄 것입니다.
긴 텍스트이므로 구성 요소 버전 관리 대 제품 버전 관리와 같은 것들에주의하십시오. 또한 OSS 커뮤니티에서 널리 사용되는 일부 버전 관리 체계에 대한 강력한 의견을 표명하지만이를 가지고 있습니다. 😉
예를 들어 Subversion 개정 번호 사용에 동의하지 않습니다. TRUNK에서 개발을 계속하면서 릴리즈 된 버전을 유지하고 싶을 수 있으므로 유지 보수 브랜치를 설정하면 개정 번호 버전이 줄어 듭니다.
편집 : 요약하면 버전 관리 소스 파일, 구성 요소 및 전체 제품을 구분합니다. 구성 요소와 제품에 대해 별도의 xy versoning 시스템을 사용하며 둘 사이의 상호 의존성이 뛰어나 어떤 구성 요소 버전이 어떤 제품 버전에 속하는지 추적합니다. 또한 시스템을 중단하지 않고 알파 / 베타 / 릴리스 / 패치주기를 처리하는 방법에 대해서도 설명합니다. 실제로, 그것은 전체 개발주기에 대한 modus 피연산자이므로 체리 픽을 원할 수도 있습니다. 😉
편집 2 : 충분한 사람들이 내 기사를 “좋은 답변”으로 만드는 데 도움이됨에 따라 기사를 다시 작성하기 시작했습니다. PDF 및 LaTeX 버전을 사용할 수 있으며, 더 나은 언어 및 설명 그래픽을 포함한 완전한 재 작성은 시간을 찾 자마자 따라 올 것입니다. 투표 해 주셔서 감사합니다!
답변
Wikipedia에서 영감을 얻으십시오 : “소프트웨어 버전 관리”
또 다른 “신규”및 “상대적으로 인기있는”옵션은 시맨틱 버전 관리입니다.
요약:
버전 번호 MAJOR.MINOR.PATCH가 주어지면 다음을 증가 시키십시오.
- 호환되지 않는 API 변경을 할 때 주요 버전,
- 이전 버전과 호환되는 방식으로 기능을 추가 할 때 마이너 버전
- 이전 버전과 호환되는 버그 수정을 할 때 PATCH 버전.
시험판 및 빌드 메타 데이터에 대한 추가 레이블은 MAJOR.MINOR.PATCH 형식의 확장으로 제공됩니다.
답변
abcd
단위 :
– D : 버그 수정
– C : 유지 보수, 예를 들어, 성능 향상
– B : 새로운 기능
– : 아키텍처 변화
필수 사항은 가장 왼쪽입니다. 예를 들어 새로운 기능과 버그가 수정 된 경우 b 만 늘리면 됩니다.
답변
복잡한 엔터프라이즈 플랫폼 수준 종속성 관리 및 릴리스 버전 관리에 대한 경험을 바탕으로 Semi-Semantic Versioning 이라고하는 접근 방식을 추천합니다 .
기본적으로 Semantic Versioning 2.0을 기반으로 하지만 엄격하지는 않습니다.
반 의미 버전 세그먼트 :
<primary.release.segment>[-<pre.release.segment>][+<post.release.segment>]
기본 릴리스 세그먼트 형식 :
마케팅, 메이저, 마이너 패치
각 세그먼트는 영숫자를 허용해야하지만 논리적 증분 변경에는 순수한 숫자가 권장됩니다.
SemVer와 마찬가지로 역 호환성 계층을 나타 내기 위해 Major, Minor 및 Patch 구성 요소 를 권장하지만 Marketing 구성 요소 앞에 추가하는 것이 좋습니다 . 이를 통해 제품 소유자, 기능 epics / 그룹 및 비즈니스 문제가 기술 호환성 문제와 무관하게 주요 구성 요소에 부딪 칠 수 있습니다.
다른 답변과 달리 기본 세그먼트에 빌드 번호를 추가하지 않는 것이 좋습니다. 대신 ‘+’뒤에 출시 후 세그먼트를 추가하십시오 (예 : 1.1.0.0 + build.42). SemVer는이 빌드 메타 데이터를 호출하지만 Post-Release Segment가 더 명확하다고 생각합니다. 이 세그먼트는 기본 릴리스 세그먼트 의 호환성 정보와 관련이없는 것으로 접미사 데이터를 선언하는 데 유용합니다.. 그런 다음 지속적인 통합 빌드에 각 1 차 릴리스 후에 재설정되는 증분 빌드 번호가 추가 된 이전 릴리스 번호를 부여 할 수 있습니다 (예 : 1.1.0.0-> 1.1.0.0 + build.1-> 1.1.0.0 + build.2-> 1.1.0.1). 일부 사람들은 코드 저장소에 쉽게 연결할 수 있도록 svn 개정 번호를 여기에 넣거나 git commit sha를 선호합니다. 또 다른 옵션은 핫픽스 및 패치에 릴리스 후 세그먼트를 사용하는 것입니다. 새 릴리스 구성 요소를 추가하는 것이 좋습니다. 버전이 효과적으로 왼쪽 정렬 및 정렬되므로 패치 구성 요소가 증가하면 항상 제거 될 수 있습니다.
릴리스와 릴리스 후 세그먼트뿐만 아니라, 사람들은 종종 사용할 시험판 세그먼트를 알파, 베타 및 릴리스 후보와 같은 거의 안정 사전 릴리스를 나타냅니다. 이것에 대한 SemVer 접근 방식은 잘 작동하지만 영숫자 분류기 (예 : 1.2.0.0 + alpha.2 또는 1.2.0.0 + RC.2)에서 숫자 구성 요소를 분리하는 것이 좋습니다. 일반적으로 릴리스 후 세그먼트를 추가하는 것과 동시에 릴리스 세그먼트를 충돌 한 다음 다음에 주 릴리스 세그먼트를 충돌 할 때 시험판 세그먼트를 삭제합니다 (예 : 1.0.1.2-> 1.2.0.0-RC.1- > 1.2.0.0). 시험판 세그먼트가 추가되어 릴리스 버전이 출시됨을 나타내며, 일반적으로 더 많은 커밋에 따라 분 단위로 변경되지 않는보다 심도있는 테스트 및 공유를위한 고정 된 기능 세트 만 나타납니다.
거의 모든 유스 케이스를 다루는 방식 으로이 모든 의미를 의미 적으로 정의하는 것의 장점은 표준 방식으로 구문 분석, 정렬, 비교 및 증가 할 수 있다는 것입니다. 이는 각각 독립적 인 버전이있는 여러 구성 요소 (마이크로 서비스 등)가 자체적으로 관리되는 종속성이있는 복잡한 응용 프로그램에 CI 시스템을 사용할 때 특히 중요합니다.
당신이 관심이 있다면, 나는 루비로 세미 시맨틱 파서를 썼다 . 이 패턴 만 사용하는 것이 아니라 그 패턴을 사용한 다른 앱을 관리 할 수 있어야했습니다.
답변
“버전 번호”는 내부 버전 관리 시스템의 문제입니다. 릴리스 번호는 다른 문제이며 KEPT와 달라야합니다.
MAJOR가 호환성 수준 (버전 2.x가 버전 1.x와 호환되지 않거나 적어도 버전 1.x와 크게 다름) 인 간단한 MAJOR.MINOR 릴리스 시스템 (v1.27과 같은)을 고수하고 MINOR는 버그 수정 릴리스 또는 사소한 개선 사항입니다. . XY 형식을 따르는 한 YEAR.MONTH (2009.12) 또는 YEAR.RELEASE (2009.3)와 같은 다른 시스템을 사용할 수도 있습니다. 그러나 실제로 정당한 이유가 없다면 MAJOR.MINOR을 고수하는 것이 가장 좋습니다.
XY 형식에 맞지 않는 것을 사용하지 마십시오. 배포판, 발표 웹 사이트 등이 귀하와 함께 작동하기 어려워지고 단독으로 프로젝트의 인기에 심각한 영향을 줄 수 있습니다.
(바람직하게 분산 된) 버전 관리 시스템에서 분기 및 태그를 사용하여 MAJORS 및 MINORS와 관련된 특정 내부 버전 번호를 각각 표시하십시오.
그리고 1.0은 안정적이어야합니다. 알파, 베타 또는 RC로 표시되지 않는 한 모든 릴리스는 안정적이어야합니다. 잘 알려지지 않은 불완전한 알파를 사용하십시오. 알려진 깨진 베타. “시도해보세요. 아마도 우리가 놓친 것들을 발견 할 것입니다.” 이들 중 하나가없는 것은 (이상적으로는 물론) 테스트되고, 잘 알려져 있으며, 최신 매뉴얼이 있어야합니다.