문제

우리 팀은 최근 대부분의 전복 저장소 레이아웃의 전형적인 "트렁크"브랜치를 사용하지 않기로 결정했습니다. 우리는 어떤 순간에 우리는 다른 저장소에서 트렁크가 가지고있는 전통적인 역할에서 기능하는 특정 지점이 항상 있음을 발견했습니다. 즉, 우리는 항상 우리가 작업중인 다음 릴리스를 나타내는 가장 높은 수준의 지점을 가지고 있습니다. 따라서 트렁크와의 병합은 단순히 불필요하므로 트렁크를 제거했습니다.

다른 사람 이이 일을합니까?

그렇다면 장단점을 발견 했습니까?

팀 이이 작업을 수행하지 않더라도이 레이아웃에 대한 생각이 있습니까?

도움이 되었습니까?

해결책

당신은 그것에 대해 이야기하고 있습니다 홍보 모델 - Perforce의 논문은 그것의 문제를 강조합니다 - 코드 라인의 변화하는 역할을 전달하고 분기 간 작업을 이동합니다.

나열된 문제에 대한 내 견해에 대한 확장 :

1) 코드 라인의 정책 변경 :

모든 코드 라인에는 정책이 기록되고 공식화되었는지 또는 개발자의 머리에 전적으로 암시적인 정책이 있습니다. 예를 들어 정의합니다.

  • 코드 라인에 커밋 할 수있는 사람
  • 얼마나 많은 테스트가 필요한지 (예 : 단위 테스트가 통과 해야하는지, 회귀 테스트, 전체 시스템 테스트)
  • 얼마나 많은 사람들이 검토 변경을 코드 해야하는지
  • 어떤 종류의 변화가 허용됩니까?

트렁크 접근 방식을 사용하면 정책이 고정되어 있으므로 기록하기가 더 쉽기 때문에 의사 소통이 더 쉽습니다 (더 큰 팀에서 더 중요합니다).

예 : 트렁크 :

  • 모든 개발자는 커밋 할 수 있습니다
  • 모든 변화
  • 단위 테스트는 통과해야합니다
  • 커밋 후 코드 검토

버전 분기 :

  • 유지 보수 개발자 만
  • 버그 수정 만
  • 단위 테스트 + 회귀 테스트
  • 커밋 전에 다른 두 개발자의 코드 검토

태그 지점 :

  • 창조 후 커밋이 없습니다

개발자의 개인 지점 :

  • 개발자 만 확인합니다
  • 모든 변화
  • 트렁크를 병합하기 전에만 테스트해야합니다
  • 트렁크에 병합되기 전에 코드 검토

프로모션 모델이있는 경우 메인 개발 중에 하나의 정책이 있으면 릴리스를 준비하는 동안 정책을 변경할 때 모든 사람에게 알리고 라인이 릴리스되면 다른 정책 (코드 라인)을 알리십시오.

프로모션 모델은 쉽게 들어가기 쉬운 모델이며, 비 소스 제어 방식에 직접 매핑됩니다. 그러나 큰 팀을 시작하면 아파요.

Linux 커널 개발을 살펴보면 프로모션 모델과 트렁크 모델 사이의 긴장을 볼 수 있습니다. Linus의 트리는 홍보입니다. 병합 창과 RC/안정화 기간 사이의 순환을 거칩니다. 그러나 Linux -Next와 -mm은 더 많은 트렁크를 제공하기 위해 생겨났습니다.

분산 된 SCM/VC는 어쨌든 다소 다르며, 각 개발에는 자신의 나무가 있고 원할 때 변경 사항을 가져 오기 때문에 모든 개발자에게 정책을 배포 할 필요는 없습니다.

오픈 소스 프로젝트는 트렁크에서 분기 한 후 사람들이 릴리스를 안정화시키는 드러그 작업을하도록 강요 할 수 없다는 문제로 어려움을 겪고 있습니다. 따라서 프로모션 모델은 기능을 수행하는 것이 아니라 안정화 노력을 강요하는 방법으로 더 중요합니다.

2) 이동 작업 :

개발자는 버그 고정에 대한 변경 사항에 대한 라인에 대한 정책에 대한 정책을 사용하고있을 수 있습니다. 이제 작업 사본을 다른 코드 라인으로 전환해야합니다. 사용중인 SCM 시스템에 따라 쉽게 어려운 곳에서 매우 어려울 수 있습니다. 개발자가 트렁크에서 작업하는 경우이 문제는 발생하지 않습니다. 개발자가 개인 또는 기능 지점에 있으면 작업은 트렁크 (및 릴리스)에만 영향을 미칩니다.

기능이 이미 체크인되었지만 현재 버전에서 지연되면 제거하는 방법을 알아야합니다. 이 문제는 여전히 트렁크 모델과 함께 존재하지만 릴리스를 위해 트렁크에서 체리를 고르는 것을 해결하기가 조금 더 쉽습니다. 기능 분기가 도움이되는 곳이지만 통합 비용이 있습니다.

다른 팁

Perforce 논문의 문제는 주요 이점을 언급하지 않고 홍보 모델을 거부하고 오버 헤드를 줄 이었다는 것입니다. 실제로이 논문은 "메인 라인 모델"이 어리석은 주장 인 "추가 행정 오버 헤드"를 부과한다고 잘못 밝혀졌다. "항상 트렁크에 합병"모델은 결합 해야하는 모든 사람의 오버 헤드가 있음을 의미합니다. 다음과 같은 상황이있는 경우 무의미한 오버 헤드입니다.

ㅏ) 소규모 팀 (5 ~ 7 명의 개발자)은 모두 서로 소리 지르는 거리 내에 있습니다. 커뮤니케이션은 우리가 지점을 만들 필요가있을 때 문제가되지 않습니다.

그리고

비) 실제로 2 개의 주요 지점이있는 코드베이스 - 생산 지점과 "다음 개발의 다음과 같은 것". 어쩌면 한 번 푸른 달에 우리는 3이 있습니다.

내 요점은 - 상황에 맞는 것 같아요. "프로모션 모델이 문제가있다"고 말하는 것은 "또는/m을 사용하지 않는다"고 말하는 것과 같습니다. 그것은 당신의 환경에 따라 다릅니다.

전복은 두 가지 접근 방식을 모두 허용합니다. 트렁크는 필수가 아니라 협약입니다. 있으면 일부 도구가 더 쉽게 작동합니다 (예 : GIT 용 마이그레이션 도구). 당신이 그것을 가지고 있지 않다면, 당신은 수동으로 일을해야하지만, 나는 당신의 일상적인 일 동안 알아볼 무언가를 생각할 수 없습니다.

나는 최근에 전복 저장소에있는 프로젝트 작업을 시작했습니다. 저장소를 만든 사람은 특정 레이아웃을 따르지 않았습니다. 그들은 단순히 저장소의 루트에있는 모든 것을 채웠습니다 (트렁크/, 분기/및 확실히 태그가 없음). 나는 작업 할 분기와 다른 물건에 대한 일부 태그를 만들고 싶었지만 적절한 레이아웃을 따르지 않는 전복 저장소에서 그렇게하는 것이 얼마나 어려운지 깨달았습니다.

우리는 - 일종의. 우리는 트렁크를 사용하지 않지만 프로젝트의 각 릴리스마다 새 지점을 만듭니다. 이 'Tagged'브랜치는 각 버전의 트렁크이며, 구형 릴리스에 변경 사항을 병합하여 Bugfixes를 백 포트합니다.

그것은 우리에게 잘 작동하지만 프로젝트에 많은 하위 프로젝트가 있습니다.

IME, 일부 환경에서 트렁크는 수정 및 변경 사항을 교환하기에 좋은 장소입니다. 즉, 모두가 자신의 수정 사항을 통합합니다 에게 트렁크와 모두가 다른 사람들의 수정을 통합합니다 ~에서 트렁크. 우리는 많은 독립 프로젝트들 사이에서 많은 코드가 공유되는 환경과 모든 프로젝트가 공유 코드에 기여한 환경에서 매우 도움이된다는 것을 발견했습니다.

그러나 환경은 다를 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top