2009-08-14 3 views
3

SVN 레드 빈 책을 읽고 사람들이 SVN repos를 어떻게 레이아웃하는지 연구했습니다. 우리는 SVN을 제품에 사용하려고 생각하고 있습니다. 그래서 repos 레이아웃에 대한 제안을 원합니다.내 프로젝트에 좋은 SVN 레이아웃을 추천합니다.

Program 1 
Program 2 
Program 3 
Common Code 
Graphics 

그것은 때로는 프로그램 1은 소스 파일을 사용할 수 있습니다하는 것이 중요합니다 :

이 제품은 현재 소스 레이아웃이 뭔가처럼 .EXE, 그래픽 등의 숫자로 구성된 데스크톱 응용 프로그램입니다 그것도 프로그램 2에 있습니다. 공통 코드 및 그래픽은 모든 프로그램에서 사용됩니다.

주된 질문은 모든 사용자가 현재 2009 버전의 제품을 사용 중이며 서비스 팩을 릴리스하고 서비스 팩을 릴리스하고 동시에 2010 버전 개발을 시작해야하며 트렁크가 포함되어야합니다. 2009 년판 또는 2010 년판에 대한 변경 사항은 무엇입니까?

trunk (where 2010 development happens) 
    Program 1 
    Program 2 
    Program 3 
    Common Code 
    Graphics 
branches 
    v2009 
    Program 1 
    Program 2 
    Program 3 
    Common Code 
    Graphics 
tags 
    2009 (read only) 
    2009 SP1 (read only) 
    2009 SP2 (read only) 

위의 레이아웃이 권장 레이아웃일까요? 또는 트렁크에 2009 년 개발과 2010 년 개발 테스트 분기가 포함되어 있어야합니까? 개발자가 프로그램 한 작업을하고자하는 경우

위의 레이아웃 프로그램, 그들은 여전히 ​​프로그램이 포함하여 전체 프로젝트를 체크 아웃해야합니다, 3.

편집, 많은 질문을 의미 하는가

멀리 주셔서 감사합니다. 추가 질문이 있습니다.

개발하는 동안 버전 2009가 여전히 사용자가 사용하고 있으며 2010 년 개발이 진행되는 동안 유지 관리가 필요한 경우 4 ~ 6 개월이 소요됩니다. 그 시간 동안 2009 년 및 2010 년 출시에 변경 사항을 적용하는 가장 좋은 방법은 무엇입니까? 2009 년에 이러한 변경 사항을 2010 년에 포트에 적용해야합니까?

답변

2

이렇게하는 가장 간단하고 가장 일반적인 방법은 트렁크에서 새 개발 (2010)을 진행하고 트렁크 (2009) 지점에서 유지 관리하는 것입니다. 트렁크를 해제하면 즉시 (2010 년 지점) 분기하고 트렁크에서 다음 버전 (2011) 시작합니다.

실제로는 일반적으로 그렇게 간단하지 않습니다. 예를 들어, 2010 년이 완료되기 전에 2011 년에 작업을 시작할 수도 있습니다. 또한 발생할 수있는 더 복잡한 상황이 많이 있습니다. 가지를 관리하는 여러 가지 방법에 대한 좋은 개요로 책 Software Configuration Management Patterns을 제안 할 것입니다.

일을 패치 할 곳은 다른 사람들이 당신을 (경영진) 결정할 것이라고 생각하지만, 모든 버그 수정이 릴리스 분기에 통합 된 다음 정책에 통합하는 것이 가장 쉽습니다. 트렁크. 이것은 트렁크에서 벌어지는 일에 비해 버그 수정이 상대적으로 적기 때문입니다.

반드시 어떤 스키마를 사용할지 결정한 후 문서화하고 모든 사람과 지식을 공유하십시오. 내 경험상 많은 사람들이 도구의 유연성이나 경험 부족으로 인해 분기 정책에 대해 쉽게 혼란스러워합니다. 사람들이 어떤 지사에서 일할 지 혼란스러워하지 마십시오.

2

레이아웃이 마음에 들어요. 나는 년이 갈수록 트렁크가 항상 올해의 발전이되어야한다고 생각합니다. 새해가 시작될 때마다 작년의 진행중인 개발 및 이름 태그에 대한 분기를 만들지 만 적합하다고 생각합니다.

0

트렁크에는 항상 최신 버전이 포함되어 있지만 트렁크가 하나만 있어야하는 것은 아닙니다. 내가 유용하다고 생각한 레이아웃은 모든 응용 프로그램에 대해 서로 다른 dir을 갖고, 그 다음에 각각의 트렁크/태그/브랜치 안에 있습니다. 이 방법을 사용하면 코드 간의 종속성에 대해 신중을 기해야하는 대신 버전 관리에서보다 세분화 된 기능을 사용할 수 있습니다.

+0

IMHO,이 경우에는 의미가 없습니다. '시스템'은 3 개의 앱으로 구성됩니다. 시스템 전체를 버전 관리해야합니다. 3 개의 독립적 인 응용 프로그램이라면 레이아웃에 동의 할 것입니다. – EmmEff

+0

동의했다. 그러나 그것은 나를 위해 명확하지 않았다.프로그램이 함께 있다면 단일 트렁크를 갖는 것이 더 좋지만 그래픽 서브 시스템에 다른 트렁크가있을 수 있습니다 (예 : 적절히 버전이 지정됨). –

+0

과거에 내가 본 방식은 전체 PRODUCT의 버전이 하나의 디렉토리 계층 구조 아래에 있어야합니다. 제품을 어셈블하기 위해 디렉토리 트리를 선택하고 선택해야 할 필요는 없습니다. – EmmEff

2

Subversion에 의해 관리 된 모든 프로젝트에서 트렁크는 "개발"지점을 보유하고 있습니다. 각 릴리스는 태그 (또는 지점, 더 이상 유지되어야 끝나야)를 얻습니다. devel 분기와 관련된 분기에 대한 변경 사항은 필요에 따라 병합됩니다.

0

개발의 메인 라인이 2010 년이면 트렁크가 적절한 위치에있는 것 같습니다. 브랜치에서 2010 년 트렁크에서 2009 년으로 병합 할 계획이라면 잘된 것 같습니다.

일반 코드 및 그래픽에 대해 svn : externals을 사용한다고 가정하면 외부 버전을 특정 버전 번호로 설정하는 습관을 가지기 시작합니다. 시작하기에 약간의 작업이 필요하지만 중장기 적으로는 고통을 덜받습니다.

0

트렁크를 현재 프로덕션 릴리스의 참조로 사용할 수도 있습니다. 모든 개발은 특정 지사에서 수행 될 수 있습니다.

그러면 운영 유지 보수를위한 소스 코드에 대해 항상 액세스 할 수있는 참조를 얻을 수 있습니다. folowwing 레이아웃 외관 : 당신은 SVN을 사용하는 릴리스를 통해 안정적인 공통 코드가있는 경우

또한, 나는 제안

CommonCode: 
    trunk 
    branches 
    tags 

MyProduct 
    trunk 
    Dependencies -> CommonCode/trunk[rev. x] 
    ... 

당신은 또한이 지점 통합을 위해 "해제"문제에 대해 생각할 수 있습니다.

1

다음은 저에게 도움이되는 내용입니다. 개발 (새로운 기능, 버그 수정)은 트렁크에서 계속됩니다. 주요 릴리즈가 준비되면 릴리즈 브랜치 (예 : v2009)가 생성됩니다. 릴리스 분기에서 발견 된 버그는 먼저 릴리스 분기에 커밋되고 트렁크가 두 번째로 병합되며 마지막 릴리스 분기로 병합됩니다.

릴리스 된 지점에서 릴리스 된 소프트웨어의 버그를 발견하면 버그 수정을 적용 할 수있는 안정된 장소를 확보해야합니다. 새 릴리스를 절단 할 때는 항상 릴리스 분기를 사용할 수 있어야합니다.

따라서 버그는 먼저 발견 된 릴리스 지점에서 수정되고 다른 곳에서는 적용됩니다. 이는 고객이 버그를 발견했으며 최대한 빨리 고객을 만족시키는 것이 가장 중요하다는 가정을 기반으로합니다. 이것이 사실이 아니라면, 나는 가장 큰 벅을 제공 한 지점에서 수정 작업을 고려할 것입니다. 가지들 사이의 합병은 항상 사소한 것은 아니라는 것을 명심하십시오. 버그를 제거하거나 손으로 병합해야하는 주요 코드 변경이있을 수 있습니다.

대용량 기능을 개발하거나 대규모 인프라를 재 설계 할 때 간혹 트렁크에서 개발 분기를 만들려고합니다. 트렁크에 병합되는 모든 것은 개발 브랜치에 병합되어야합니다. 이로 인해 궁극적으로 트렁크에 쉽게 병합됩니다.

0

GIT를 사용하는 것이 더 나을 것이므로, 각 주요 릴리스에 대해 지점을 수행하십시오. 이렇게하면 주요 릴리즈에서 버그가 발생하면 다시 분기로 전환 한 다음 GIT 저장소의 다른 커밋을 릴리스 분기로 커밋 할 수 있습니다.

관련 문제