버전 관리하에 다른 버전의 라이브러리를 어떻게 배치합니까? 태그를 사용하십니까? 아니면 가지? 아니면 다른 방법?


24

나는 최근에 코드를 버전 제어 (실습, SVN 및 github (명확하게 git))에서 코드를 시작하기 시작했다. 버전 관리를 사용하기 전에 이런 식으로 작업했습니다. 버전 번호가있는 많은 폴더 안에 라이브러리 이름의 폴더가 있습니다. 새로운 버전으로 작업을 시작할 때마다 마지막 버전을 복사하고 이름을 새 버전으로 변경 한 다음 구현을 시작합니다.

그러나 이것은 폴더가 버전 제어하에있을 때 중복되는 것처럼 보입니다. 누군가가 최신 버전을 다운로드하고자하는 경우 별도로 중복에서, 그들은 모든 버전의 경우 그가 바로 다운로드 할 것 importS / cloneS를.

이제 버전 제어 로이 작업을 수행하는 여러 가지 방법을 보았지만 처음 사용하기 때문에 유지 관리가 더 쉬운 방법을 모르겠습니다.

방법 1 : 태그 사용

태그를 올바르게 이해했다면 메인 브랜치가 있고 변경 사항을 커밋하고 버전으로 태그를 지정합니다. 그런 다음 작업 사본을 얻으려면 특정 태그가있는 사본을 얻습니다. (틀 렸으면 말해줘)

방법 2 : 분기 버전

이 방법에서 주요 지점은 개발 지점입니다. 언제든 안정적인 버전이 만들어지고 (라고합시다 v1.2.0), 해당 버전에 대한 브랜치를 만들고 절대 커밋하지 마십시오. 이렇게하면 특정 버전을 다운로드하려는 경우 해당 지점에서 코드를 얻습니다. 나는 당신이 그것에 최선을 다하지 않겠다고 말했지만, 버그 수정을하고 구 버전의 브랜치를 구하여 구 버전을 계속 실행할 수있다. 예를 들어 현재 버전 인 경우 v2.0만 사용하려는 사람들이있다 v1.2, 당신은에서 다른 지점 얻을 수있는 v1.2, 즉를, v1.2.1그리고 버그 수정을 커밋하거나 같은 버전을 동일하게 유지 v1.2그냥 버그 수정을 커밋은.

따라서 가지는 다음과 같습니다.

                  v1.2.1  v1.2.2
                 /       /
 v1.0.0   v1.2.0---------     v2.0.0
/        /                   /
-------------------------------------- dev

이렇게하면 모든 부 버전 업데이트에 대한 분기가 있습니다. (위의 그래프에서 v1.2.1 및 v1.2.2 또는 v2.0.0이 릴리스 된 후 작성되었으므로 v1.2.0과 v2.0.0 사이의 개발에 포함되지 않았습니다. 이전 버전에 대한 지원으로 생각하십시오)

방법 3 : 분기 개발

이 방법은 이전과 반대입니다. 주요 지점은 최신 안정 버전입니다. 새 버전으로 작업 할 때마다 (개발 용) 브랜치를 만들고 코드 작업을하고 코드가 안정되면 메인 브랜치와 병합하십시오.

이 경우 가지는 다음과 같습니다.

 ________  ____  ________________  _____ dev
/        \/    \/                \/
---------------------------------- latest_version

아마도 이것은 태그와 함께 수행되어야합니까?

질문!

어쨌든, 나의 질문은 당신의 경험에 근거하여,이 방법들 중 어느 것이 더 실용적이라는 것입니까? 알려진 최선의 방법이 있습니까 (아마도 내가 알아 내지 못했을 수도 있음)? 이런 일들이 일반적으로 어떻게 이루어 집니까?

답변:


17

태그와 브랜치는 서로 다르지 않으므로 둘 다 사용할 수 있습니다 (보통 IMO 사용). 개발에서 이정표를 표시하기 위해 태그가 있습니다. 예 : 당신은 당신의 제품의 버전 1.2에 대한 분기를 열고, 당신은 표시 v1.2 Beta, RC1, RC2, Final(다음, 필요한 경우, SP1같은 분기에 태그 등).

개인적으로 방법 2를 기본 방법으로 선호합니다 (여러 가지 수준의 가지를 피하고 가능한 한 간단하게 생활을 유지하려고 노력하지만). 방법 1은 실생활에서 작동하지 않습니다. 태그로는 충분하지 않습니다. 분기가 필요합니다. 그리고 방법 3은 항상 하나의 안정적인 버전을 가지고 있다는 점에서 융통성이 없으므로 (방법 2와 결합하지 않는 한) 여러 (최신 및 이전) 버전을 병렬로 유지할 수 없습니다. 이것은 거의 모든 실제 프로젝트에서 필요합니다. 버전 2에서 작업하는 동안 v1.9 및 종종 이전 버전의 패치 / 업그레이드를 계속 게시 할 수 있습니다. 물론 적용 유형에 따라 다릅니다. 웹 앱을 개발하므로 특정 시점에 하나의 프로덕션 버전 만 있지만 여전히 3 가지 버전 (하나는 프로덕션, 하나는 UAT에 배치 준비 중이고 하나는 트렁크의 최신 버전입니다). 여러 개의 이전 버전이 동시에 사용되고 유지 관리되는 데스크톱 / 클라이언트 앱의 경우 훨씬 더 복잡해질 수 있습니다.


글쎄, 내가 말했듯이 방법 3은 태그와 함께 사용될 수 있으므로 안정적인 커밋을위한 태그가 있습니다. 확실하게 태그가 있는지 확실하지 않지만 커밋에 태그를 지정하면 해당 태그가있는 커밋으로 리포지토리를 가져올 수 있습니까? 그렇다면 안정적인 버전이 많이 있지만 동일한 지점에 있습니다 (다른 태그 아래)
Shahbaz

@Shahbaz는 그렇습니다. 그러나 요점은 태그가 지정된 버전은 읽기 전용이므로 변경할 수 없다는 것입니다. 즉, 트렁크에서 새로운 기능을 개발하는 동안 이전 버전의 버그를 수정할 수 없습니다.
Péter Török

잊지 말고 태그 만 사용할 수 있으며 이전 버전으로 돌아가서 수정해야하는 경우 해당 태그를 필요할 때 분기로 변환 할 수 있습니다.
Chloe

6

버전 번호가있는 많은 폴더 안에 라이브러리 이름의 폴더가 있습니다.

이미 버전 컨트롤을 가지고 있기 때문에 버전을 제어하기 때문에 이것은 잘못된 접근 방식입니다.

이제 열거 한 다른 기술이 모두 똑같이 옳아 보입니다. 태그 및 브랜치에 대한 정보가 포함 된 매우 자세한 기사 인 소스 제어 완료 권한을 읽을 수 있습니다 .


예, 첫 번째 방법은 코드를 버전 관리하에 받기 전에 사용했던 방법이었습니다. 나는 당신의 링크를 읽고 당신에게 알려줄 것입니다
Shahbaz

연결이 훌륭했습니다. 나는 방법 2가 더 좋다는 느낌을 받았다. (적어도 나에게는 기본적으로 라이브러리의 유일한 개발자 임)
Shahbaz

3

세 가지 방법은 상호 배타적이지 않으므로 세 가지 방법을 결합하여 버전 관리를 최대한 활용해야합니다.

필자는 기본적으로 방법 1과 3의 조합을 사용합니다. 즉, 기능이 프로덕션 준비가 될 때까지 기능 또는 개발 분기에서 개발 한 다음 다시 트렁크로 병합합니다. 이런 식으로 트렁크는 항상 안정적이고 사용 가능한 개발의 현재 상태를 나타내며 svn : external 프로젝트로 안전하게 연결할 수 있습니다. 버전을 릴리스하면 태그를 지정하십시오.

난 단지 라이브러리 이전 버전의 버그이 때, 수요에 분기 줄 고정 될 수있다. 깨진 버전의 태그에서 해당 분기를 쉽게 만들 수 있습니다. 불필요하게 분기하지 않으면 분기 수를 낮게 유지하고 유지해야하는 블리딩 가장자리 (트렁크 및 모든 분기)에 대한 개요를 신속하게 확인할 수 있습니다.


2

방법 2를 사용 합니다 . 나는 이것을 사용하여 현재 개발을 계속 진행하면서 여러 버전을 관리하고 유지하는 효과적인 방법이라는 것을 알았습니다. 필요한 경우이 방법과 함께 태그를 사용할 수도 있습니다.

여러 릴리스 버전을 유지 관리하기 위해 분기를 사용하는 방법에 대한 자세한 내용은 여기 내 답변을 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.