SVN 브랜치가있는 경우 SVN 브랜치를 귀찮게해야합니까?


10

Subversion에서 하나의 브랜치에서만 작업한다면 귀찮게해야합니까? 트렁크에서 속도를 높이기 위해 일할 수는 없습니까?

Subversion으로 개발하는 방법은 다음과 같습니다.

  • 트렁크가있다
  • 우리는 새로운 개발 지점을 만듭니다
  • 해당 지점에서 새로운 기능을 개발합니다
  • 기능이 완료되면 기능이 트렁크에 병합되고 분기가 제거되고 트렁크에서 새 개발 분기가 작성됩니다.

프로덕션으로 출시하려면 트렁크에서 태그를 만듭니다. 버그 수정은 해당 태그의 브랜치에서 이루어집니다. 그런 다음이 버그 수정이 트렁크에 병합됩니다.

이것이 기능이 완료된 후 새로운 개발 브랜치를 만드는 이유입니다. 이런 식으로 버그 수정이 새로운 코드에 곧 포함됩니다.

아래는 명확히해야 할 다이어그램입니다.

우리의 Subversion 전략

이제 이것이 가장 효율적인 작업 방법이 아니라는 느낌이 듭니다. 커밋하기 전에 로컬로 빌드하는데 약 5-10 분이 걸립니다. 대기 시간이 상당히 길다는 것을 이해할 수 있습니다.

개발 브랜치의 아이디어는 트렁크가 항상 릴리스 가능하다는 것입니다. 그러나 이것은 우리의 상황에서 더 이상 사실이 아닙니다. 때로는 기능이 거의 준비되어 있고 일부 개발자는 이미 다음 기능을 코딩하기 시작합니다 (그렇지 않으면 한두 명의 개발자가 완료하고 병합하기를 기다리는 중입니다).

그런 다음 기능 1이 완료되면 기능이 트렁크에 병합되지만 기능 2의 커밋이 포함됩니다.

그렇다면 지점이 하나뿐이므로 개발 지점을 귀찮게해야합니까? 트렁크 기반 개발 및 분기 별 개요에 대해 읽었지만 대부분의 기사에서는 분기 별 요약 부분에 중점을 두었습니다. 여러 릴리스에 걸쳐 큰 변화가있을 것이라는 인상을 받았습니다. 이것은 우리가 가진 문제가 아닙니다.

어떻게 생각해? 트렁크 작업 만해도 되나요? 최악의 시나리오는 일부 커밋 / 기능이 아직 생산 준비가되어 있지 않기 때문에 트렁크에서 태그를 만들고 필요한 커밋을 체리 선택해야한다고 생각합니다.


1
지점이 두 개 이상 있으면 더 좋을 것 같습니다. 각 기능마다 하나씩. 이렇게하면 약간의 시간이 걸리는 큰 기능에 대한 작업을 시작한 경우 이미 릴리스 된 버전의 버그 수정과 같은 기능을 유지할 수 없습니다.
Amy Anuszewski

각 기능에 대한 브랜치는 복잡성을 줄이려고 노력하면서 더 복잡하게 만듭니다. 또한 버그 수정이있는 경우 (예 : 1.0) 태그로 만든 분기에서 수행 할 수 있습니다. 그런 다음 해당 분기에 태그를 지정하고 (1.1 작성) 릴리스 한 다음 버그 수정을 트렁크에 병합 할 수 있습니다. 큰 기능의 개발은 트렁크에서 계속 될 것입니다.
Peter

답변:


6

적은 양으로 커밋하고 지속적으로 통합 할 수 있으면 트렁크에서 직접 작업하는 IMHO가 좋습니다. 따라서 커밋이 기존 기능을 중단하지 않도록 할 수 있습니다. 우리는 현재 프로젝트에서도 그렇게합니다 (사실 기본적으로 작업 별 분기를 사용하는 프로젝트에서는 일하지 않았습니다).

릴리스 전에 또는 기능을 구현하는 데 시간이 오래 걸리는 경우 (예 : 여러 반복 / 릴리스에 걸친) 분기 만 만듭니다. 작업의 대략적인 크기는 거의 항상 충분히 잘 평가할 수 있으므로 별도의 분기가 필요한지 미리 알 수 있습니다. 또한 다음 릴리스 이전에 남은 시간 (약 2 개월마다 릴리스를 게시 함)을 알고 있으므로 다음 릴리스 이전의 사용 가능한 시간에 작업이 적합한 지 여부를 쉽게 확인할 수 있습니다. 확실하지 않은 경우 릴리스 브랜치를 생성 할 때까지 연기하고 트렁크에서 작업을 시작해도됩니다. 지금까지 작업 별 분기를 한 번만 (약 3 년) 만들어야했습니다. 물론 프로젝트가 다를 수 있습니다.


1
저는 피터와 함께 있습니다. 지원되는 각 릴리스에 대한 분기가 있지만 그렇지 않은 경우 트렁크에서 작동합니다. 또한 지속적인 통합을 사용하지만 이는 단위 테스트를 통해서도 기존 기능이 손상되지 않았다는 것을 의미합니다.
Ian

@Ian은 물론 테스트를 통해 코드에 100 % 버그가 없음을 보장 할 수는 없습니다. 리소스가 제한되어 있기 때문에 합리적인 수준의 안전성 (도메인 및 프로젝트 별 정의)을 목표로합니다 . 또한 CI는 단위 테스트뿐만 아니라 통합 등 테스트도 실행할 수 있습니다.
Péter Török

실패 할 때까지 작동합니다. 새 기능이 준비되기 전에 수정 사항을 구현해야하는 경우 ... 또는 새 기능 릴리스가 프라임 타임 준비가되지 않은 경우 분기를 사용하지 않으면 코드에서 변경된 부분을 되 돌리는 것이 훨씬 어려워집니다.
SoylentGray

@Chad, 최신 릴리스에 대한 패치는 해당 릴리스 분기에서 트렁크의 간섭없이 수행됩니다. 우리는 새로운 기능을 상당히 광범위하게 테스트하여 언제 준비가되었는지 알 수 있습니다. 물론, 우리는 프로젝트에 큰 기능이 상대적으로 적습니다. 또한 서버 측 웹 응용 프로그램이므로 DB 플래그를 추가하여 기능을 선택적으로 켜거나 끌 수 있습니다. YMMV.
Péter Török

LOL ok 나는 잘못 이해했고 당신이 방금 트렁크를 가지고 있다고 생각했다. ) 정수.
SoylentGray

1

기능 개발에서 설명하는 것은 병렬 개발 (다른 제품 릴리스를 대상으로하는 동시 개발)이며이를 제대로 처리하려면 분기가 필요합니다. 특정 릴리스를 작성하는 기능을 자주 재구성해야하는 경우 각 릴리스 또는 각 기능에 대해 하나의 브랜치를 가질 수 있습니다.

이를 수행하는 다른 방법은 기본적으로 트렁크 외부에서 작업하지만 다음 릴리스 이후에 작업이 확장 될 것으로 예상되는 경우 분기를 작성하는 것입니다. 물론 항상 릴리스에 태그를 지정하십시오.

어떤 접근 방식을 실제로 수행 할 수 있는지에 따라 달라집니다. 일반적인 릴리스에 실제로 병렬 개발이 없으면 두 번째 방법을 사용합니다.


동의합니다. OP는 '때로는 기능이 거의 준비되었으며 일부 개발자는 이미 다음 기능을 코딩하기 시작할 것입니다 ...'라고 동의했습니다.
Chris

예,하지만 재구성 할 필요는 없습니다. 기능은 시간순으로 구현되며 예를 들어 기능 1-4는 모두 다음 릴리스 (1.0)에 있어야합니다. 이것이 문제가 될 수있는 유일한 시간은 기능 5에서 개발이 시작된 시점이며, 그 이후 릴리스 (2.0)입니다. 그런 다음 태그 / 릴리스 (1.0)에서 이러한 변경 사항이 적용되지 않도록해야합니다. 출시 전에 지점을 만들면 실제로 고칠 수 있습니다.
Peter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.