답변:
분기에는 몇 가지 용도가 있습니다. 가장 일반적인 용도 중 하나는 한때 공통 코드 기반이 있던 프로젝트를 분리하는 것입니다. 이것은 메인 트렁크에 영향을주지 않고 코드를 실험하는 데 매우 유용합니다.
일반적으로 두 가지 분기 유형이 표시됩니다.
기능 분기 : 특정 기능이 전체 개발 팀이 초기 단계에 영향을받는 것을 원하지 않을만큼 혼란스러운 경우이 작업을 수행 할 분기를 만들 수 있습니다.
Fixes Branch : 개발이 메인 트렁크에서 계속되는 동안, 소프트웨어의 최신 릴리스 버전에 대한 수정을 보관하기 위해 수정 브랜치를 생성 할 수 있습니다.
분기의 원칙과 사용시기를 설명하는 다음 기사를 확인하는 것이 좋습니다.
일반적으로 분기 (VCS-버전 제어 시스템-기능)의 주요 목적은 코드 격리 를 달성하는 것 입니다.
당신은 적어도이 하나 개의 순차적 인 개발을 위해 충분히 될 수 분기를, 그리고 같은 독특한 분기에 녹화 (노력)있는 많은 작업에 사용됩니다.
그러나 그 모델은 그 한계를 빠르게 보여줍니다.
개발 노력 (리팩토링, 진화, 버그 수정 등)이 있고 현재 개발 브랜치와 동일한 브랜치에서 이러한 변경을 안전하게 수행 할 수 없다는 것을 깨달을 때 (API를 손상 시키거나 중단되는 코드를 도입하기 때문입니다. 모든 것), 그러면 다른 지점 이 필요합니다 .
( 나중에 두 코드 세트가 병합 되더라도 레거시 코드에 대한 새 코드 를 분리 하려면 )
이것이 바로 거기에 대한 답
입니다. 한 지점에서 두 가지 개발 노력을 추구하고 기록 할 수 없을 때마다 분기해야합니다.
(유지해야 할 끔찍하게 복잡한 역사가 없음).
브랜치는 소스 코드에서 작업하는 유일한 사람이더라도 유용 할 수 있습니다.
그러나 "개발자 당 하나의 브랜치"를 만들어서는 안됩니다.
"격리"목적은 개발 노력 을 분리하기 위한 것입니다 ( "다음 버전의 소프트웨어를 개발하자"처럼 일반적이거나 "수정하자"와 같이 구체적 일 수 있음). bug 23 "),
"리소스 "를 분리하지 않습니다 .
( "VonC"라는 분기는 다른 개발자에게 아무런 의미가 없습니다. "VonC"가 프로젝트를 떠나면 어떻게됩니까?이 프로젝트로 무엇을해야합니까?
"bugfix_212"라는 분기는 예를 들어 버그 추적 시스템의 컨텍스트에서 해석 될 수 있습니다. , 모든 개발자는 자신이해야 할 일에 대한 아이디어를 가지고 사용할 수 있습니다.)
분기는 태그가 아닙니다 (SVN은 저렴한 파일 복사를 통해 디렉토리를 통해 분기 및 태그 지정과 같은 버전 관리 기능을 제안 하려는 개정 시스템 입니다 . 태그가 분기라는 의미는 아닙니다)
브랜치를 정의한다는 것은 병합 워크 플로 도 정의하는 것을 의미 합니다. 브랜치를 완료 한 후 병합 할 위치를 알아야합니다.
이를 위해 Practical Perforce (Laura WINGERD-O'Reilly)의 7 장은 서로 다른 종류의 브랜치 간의 워크 플로우를 병합하는 좋은 소개 (VCS 불가지론)입니다. "" 소프트웨어가 진화하는 방법 "(pdf)
이 용어 정의 코드 라인 (코드의 중요한 발전 단계를 기록 지점, 중 특정 지점에서 태그를 통해, 또는 분기에 중요한 병합 다시 통해를)
메인 라인 모델 (릴리스를 기록하는 중앙 코드 라인)을 소개하고 분기를위한 다양한 목적을 설명합니다.
VCS에 대한 기타 흥미로운 개념 : 기본 개념
(원래 ClearCase에 대한 것이지만 모든 VCS에도 유효 함)
21 세기의 모든 SCM은 다음과 같이 말합니다.
새로운 기능, 버그 수정, 테스트 여부에 관계없이 작업해야하는 모든 작업에 대해 분기합니다 . 이를 토픽 브랜치라고하며 SCM으로 작업하는 방식을 변경합니다.
당신은 얻을 :
이를 수행 할 수있는 도구 :
할 수없는 도구 :
또한 사용중인 SCM 도구에 따라 다릅니다. 최신 SCM (git, mercurial 등)을 사용하면 필요할 때마다 분기를 쉽게 만들고 파괴 할 수 있습니다. 예를 들어 작업중인 버그 당 하나의 브랜치를 만들 수 있습니다. 결과를 트렁크에 병합하면 분기를 버립니다.
예를 들어 Subversion 및 CVS와 같은 다른 SCM은 훨씬 "무거운"분기 패러다임을 가지고 있습니다. 즉, 분기는 20 줄짜리 패치보다 더 큰 것에 대해서만 적절한 것으로 간주됩니다. 여기에서 브랜치는 이전 또는 향후 제품 버전과 같이 전체 개발 트랙을 추적하는 데 고전적으로 사용됩니다.
사용중인 SCM 유형에 따라 다릅니다.
최신 배포 버전 (예 : git 및 mercurial)에서는 항상 브랜치를 만들고 어쨌든 다시 병합합니다. 누군가가 메인 라인에서 빌드를 망가 뜨리거나 네트워크가 다운 되었기 때문에 잠시 동안 별도의 브랜치에서 작업 한 다음 나중에 수정되면 변경 사항을 다시 병합합니다. 작업이 너무 쉬워서 짜증나지도 않습니다. .
분산 시스템의 내용을 이해하는 데 가장 도움이 된 문서 (짧고 읽기 쉬운)는 UnderstandingMercurial 입니다.
중앙 저장소가있는 이전 시스템 (예 : CVS, SVN 및 ClearCase)에서는 팀 수준에서 결정해야하는 훨씬 더 심각한 문제이며 대답은 '허용하면서 이전 릴리스를 유지하는 것'과 비슷해야합니다. 메인 라인에서 계속 개발 '또는'주요 실험의 일부로 '.
분산 모델이 훨씬 더 좋으며 지배적 인 패러다임이 될 멋진 그래픽 도구 만 부족하다고 생각합니다. 그러나 널리 이해되지 않고 개념이 다르기 때문에 신규 사용자에게는 혼란 스러울 수 있습니다.
Perforce의 Laura Wingerd와 Christopher Seiwald의 조언은 정말 간결하고 유용합니다.
* Branch only when necessary.
* Don't copy when you mean to branch.
* Branch on incompatible policy.
* Branch late.
* Branch, instead of freeze.
각각에 대한 자세한 설명과 기타 모범 사례는 http://www.perforce.com/sites/default/files/pdf/perforce-best-practices.pdf 를 참조 하십시오 .
분기에는 다양한 용도가 있습니다.
모든 기술은 제쳐두고 .....
다시 병합하는 것이 더 쉽다는 것을 알 때 분기하십시오!
병합은 프로젝트에서 작업이 수행되는 방식에 항상 영향을 미친다는 점을 명심하십시오.
이것이 달성되면 다른 모든 3 차 문제가 실행될 것입니다.