저는 (곧) 여러 다른 버전 (시험판, 전문가, 기업 등)으로 분기 될 프로젝트를 연구 중입니다.하나의 코드베이스에서 여러 제품을 개발하기위한 전략
저는 Subversion이 처음 출시 된 이래로 Subversion을 사용 해왔고 (그 전에는 CVS 였기 때문에) 분기와 태그의 추상 개념에 익숙합니다. 그러나 모든 개발 경험에서 저는 트렁크 코드에 대해서만 일했습니다. 드문 경우지만 일부 다른 개발자 (저장소를 소유 한 개발자)는 특정 지사에 변경 사항을 적용 해 달라는 요청을 받았고 그 사람이 저에게 무엇을 하든지 부탁했습니다. 나는 기괴한 흑인 예술을 "합치는"것을 고려하고 있으며, 나는 단지주의 깊은 감독하에 그것을 시도했다.
하지만이 경우 저는 저장소에 대한 책임이 있습니다. 이런 종류의 것은 완전히 새로운 것입니다.
코드의 대부분은 모든 제품간에 공유되므로 코드가 항상 트렁크에 있다고 가정합니다. 각 제품의 릴리스 빌드 용 태그가있는 각 버전에 대한 지점을 갖게 될 것으로 가정합니다.
그러나 그 이상으로, 나는 많이 알지 못합니다. 그리고 그것을 망칠 수천 가지 방법이 있습니다. 가능하다면, 나는 그것을 망쳐 놓는 것을 피하고 싶습니다.
예를 들어, 프로 및 엔터프라이즈 버전의 새로운 기능을 개발하고 싶지만 데모 버전에서 해당 기능을 제외하고자합니다. 나는 그것을 어떻게 성취 할 것인가?
나의 일상적인 개발에서, 나는 또한 일하면서 개발 지점을 지점에서 지점으로 (또는 다시 트렁크로) 전환해야한다고 가정합니다. 혼란을 최소화하는 방법으로이를 수행하는 가장 좋은 방법은 무엇입니까?
다른 전략, 가이드 라인 및 팁은 무엇을 제안합니까?
UPDATE :
음, 모든 바로 그때.
분기가 올바른 전략이 아닌 것처럼 보입니다. 그래서 나는 "분기"초점을 제거하기 위해 질문의 제목을 바꾸었고 나는 그 질문을 넓히고 있습니다. 나는 내 다른 옵션 중 일부를 가정
은 다음과 같습니다 : 나는 항상 모든 기능을 소프트웨어의 전체 버전을 배포 및 선택적 라이센스의 권한에 따라 기능을 사용하거나 사용하지 않도록하려면 라이센스를 사용할 수
1) . 내가이 경로를 택했다면, 어떤 종류의 싱글 톤 "라이센스 관리자"객체를 호출하는 if/else 블록의 쥐의 둥지를 상상할 수 있습니다. 이 경우 코드 스파게티즘을 피하는 가장 좋은 방법은 무엇입니까?
2) 의존성 주입을 사용할 수 있습니다. 그러나 일반적으로, 나는 그것을 싫어한다. (왜냐하면 로직을 소스 코드에서 구성 파일로 옮겨서 프로젝트를 더 어렵게 만든다). 그리고 그때도 여전히 전체 앱을 배포하고 런타임에 기능을 선택합니다. 가능하다면 엔터프라이즈 버전 바이너리를 데모 사용자에게 배포하지 않을 것입니다.
3) 플랫폼에서 조건부 컴파일을 지원하는 경우 #IFDEF 블록을 사용하고 플래그를 빌드하여 선택적으로 기능을 포함 할 수 있습니다. 그것은 GUI 패널 전체와 같이 크고 엉뚱한 기능을 위해 잘 작동합니다. 그러나 로깅이나 통계 추적과 같이 작고 교차 변형이 큰 콘서트는 어떨까요?
4) 저는 ANT를 사용하여 빌드하고 있습니다.ANT에 대한 빌드 타임 의존성 주입과 같은 것이 있습니까?
중간에 장애가 발생할 수 있으므로 (예 : 버전없는 파일을 손상시키지 않은 파일이있을 때) 부분적으로 전환 된 작업 복사본을 남겨두고 '스위치'사용을 권장하지 않습니다. 각 지점마다 하나의 체크 아웃을하면 혼란이 줄어 듭니다. –