이 불행한 상황에 빠지지 않고 새로운 개발을 메인 지점과 분리 한 간단한 방법이 있었을 것입니다. 트렁크의 모든 변경 사항은 매일 dev 지점으로 병합되어야 합니다 . (고객이 너무 근시안적이어서 언젠가 지점이 언젠가 다시 메인 라인으로 다시 돌아올 필요가 있다고 예상 할 수 없었습니까?)
어쨌든 최선의 접근 방법은 IMHO가 직접 수행해야 할 일을 다시 시도하는 것입니다.
- 브랜치가 생성 된 후 1 일 동안 메인 라인의 변경 사항 의 의미 를 식별합니다 . 가능한 한 현재 코드베이스에 적용하십시오. "로컬 변경"인 경우, 널리 사용되는 클래스의 이름을 바꾸는 것과 같은 "교차 절단 리팩토링"인 경우 단순해야합니다. 현재 코드베이스에 의미 적으로 동일한 방식으로 적용하십시오. 그 해에 코드베이스에서 "귀하의"브랜치에서 모순되는 교차 절단 변경이 없었 으면 좋겠습니다. 그렇지 않으면 이것이 실제 두뇌 티저가 될 수 있습니다.
- 결과를 테스트하십시오 (이 작업에 적합한 테스트 스위트가 필요하다고 언급 했습니까?) 테스트에서 밝혀진 모든 버그 수정
- 이제 2 일, 3 일 등의 주요 행 변경 사항에 대해이 프로세스를 반복하십시오.
팀이 고전적인 버전 제어 규칙 ( "컴파일 가능하고 테스트 된 상태 만 커밋"및 "초기 및 자주 체크인")을 엄격하게 준수한 경우이 기능이 작동 할 수 있습니다.
365 번 반복 (또는 250 개, 운이 좋으며 주말 변경을 위해 작업을 묶을 수있는 경우) 한 경우 거의 완료됩니다 (통합 기간 동안 기본 라인에 발생할 변경 수를 추가해야하기 때문에) ). 마지막 단계는 업데이트 된 dev 브랜치를 트렁크에 다시 병합하는 것입니다 (따라서 트렁크 기록을 잃지 않아야합니다). 기술적으로는 영향을받는 파일을 대체하기 만하면되므로 쉬워야합니다.
그리고 네, 진지합니다. 아마도 이것에 대한 지름길이 없을 것입니다. "일일 부분"이 때때로 너무 작을 수도 있지만, 이것을 기대하지는 않을 것입니다. 일일 부분이 너무 큰 것으로 밝혀 질 가능성이 높습니다. 나는 당신의 고객이 이것에 대해 정말로 당신에게 돈을 지불하기를 바랍니다. 그리고 이것은 그에게 너무 비싸서 그의 실패로부터 배울 것입니다.
스위치 측면에서도 시도해 볼 수 있습니다. 브랜치의 변경 사항을 작은 부분에서 메인 라인으로 다시 통합하십시오. 개발자 브랜치에서 트렁크보다 변경 사항이 훨씬 적거나 대부분의 변경 사항이 현재 트렁크의 일부가 아닌 새 소스 파일에서 발생한 경우이 방법이 더 간단 할 수 있습니다. 이를 제품 A (개발 지점)에서 다소 다른 제품 B (트렁크의 현재 상태)로 기능을 "포팅"하는 것으로 볼 수 있습니다. 그러나 크로스 컷팅 리팩토링의 대부분이 메인 라인에서 수행되어 새 코드에 영향을 미치는 경우 (6500 병합 충돌이 이에 대한 증거 인 것처럼 보입니다), 내가 처음 설명 한 방법이 더 쉬울 수 있습니다.