2017-10-01 1 views
1

나는 두 개의 활성 개발 나뭇 가지와 자식의 Redis Sentinel library for Laravel을 유지하고있어 : 위의 예시 된 바와 같이병합하지 않는 두 개 이상의 분기 분기를 유지하는 방법은 무엇입니까?

1.x ... o ———— o —————— o — o — o — o — o ... 
      ↘    ↑ ↑  ↖ 
2.x (breaking change) — o — o — o — o — o ... 

, 나는이 라이브러리와 통합 프레임 워크의 최신 버전에서 깨는 변화를 수용하기 위해 1.x에서 갈래 그러나 나는 자신이 두 가지 분기에서 공통 기능을 업데이트하는 분기간에 코드를 복사하거나 수동으로 코드를 복사한다고 생각한다.

다른 브랜치와 호환되지 않는 코드를 포함하고 있기 때문에이 브랜치를 병합 할 수없는 것처럼 보입니다. 브랜치 간의 일반적인 변경 사항을 병합하는 데 필요한 노력을 줄이기 위해 더 나은 워크 플로우를 수행 할 수 있습니까?

답변

2

오래된 질문입니다. 분기하거나 분기하지 않습니다.

여기에는 마법의 총알이 없습니다. 그들이 분기해야하는 이유는 무엇입니까? 새 아키텍처 구현과 같은 이유로 인해 다시 함께 돌아 오지 않기로 한 경우 1.x를 2.x로 마이그레이션하거나 발표 된 기간 후에 완전히 1.x를 사용 중지 할 수없는 이유가 있습니다. ?

일반적으로 상수 병합과 관련된 유지 관리 오버 헤드로 인해 이전 또는 변경된 변경 사항을 더 이상 지원하지 말고 중지하거나 어려운 문제를 방지하기 위해 어려운 선택 사항입니다. 당신이 그걸 가지고 살아 있다면, 당신은 새로운 기능에 소비되었을 수있는 오버 헤드에 시간을 할애하고 있습니다.

분기가 더 길어질수록 차이를 조정할 계획이 없기 때문에 기술적 인 부채가 많을수록 정기적으로 바쁘게 지낼 가능성이 커지며 성장할 가능성이 높습니다.

나는 해결책이별로 없다는 것을 알고 있지만, 다른 옵션을 모른다는 것을 알고 있습니다. 미래의 계획을 수정하지 않고 차이점을 허용한다면, 차이점과 지속적인 유지가 될 것입니다. 같은 것을 유지하기를 원하는 모든 일에 필요합니다. 나는 당신의 특정 프로젝트에 대한 핵심적인 세부 사항에 들어 가지 않으면 다른 대답을 모른다.

+0

소리를내어 주셔서 감사합니다. 이것은 내가 두려워했던 것입니다. * 1.x * 지점은 연말에 대한 지원이 중단되었지만 미래를위한 트릭이나 워크 플로우를 배우기를 희망했습니다. 분기마다 변경된 외부 코드 (각 분기를 이러한 버전으로 제한하는 패키지 관리자 메타 데이터)에 의존하므로 분기를 병합 할 수 없습니다. 이것을 조금 더 오랫동안 열어 두겠습니다.하지만이 상황에 대해 가능한 한 최선의 대답이라고 생각합니다. –

+2

외부 종속성의 차이가 나는 경우 인터페이스를 구현하거나 컴파일 타임이나 런타임에 외부 라이브러리의 버전을 선택하도록 다른 방법을 사용할 수 있습니까? 이는 실제로 다시 함께 병합하는 수단이 될 것이며, 각 버전의 코드를 업데이트를 쉽게하는 방식으로 분리 할 것입니다. 그러나 2017 년 말에 1.x를 사용하지 않을 경우 특히 그럴만 한 가치가 없을 수도 있습니다. – LightCC

+0

프로젝트를 지원해야하는 프레임 워크 버전 간의 사소한 비 호환성으로이 방법을 사용할 수는 있지만, 이 경우에는 그 차이가 상당하므로 필자는 그렇게 할 때 가치를 보지 못했다. 너무 많은 런타임 조건 (결국 PHP)은 코드를 하나의 브랜치로 강요하는 것을 정당화 할 수 있다고 생각하지 않는 복잡성과 오버 헤드를 초래합니다. 다시 한 번 시간을내어 주셔서 감사합니다. 제안을 읽은 후 포크하는 결정에 대해 더 기분이 좋습니다. 나는 그 마법 총알을 찾고 있었다고 생각한다! 미래 프로젝트에 대해 생각해 볼 일을 몇 가지 주셨습니다. –

관련 문제