2015-02-04 4 views
1

약 30 명의 클라이언트를 지원하는 중간 크기의 HMVC 웹 응용 프로그램을 리팩토링하기 시작했습니다. 현재이 코드는 SVN 저장소의 단일 분기로 관리됩니다. 때로는 변경 사항이 클라이언트마다 다르며 다른 경우에는 변경 사항이 모든 클라이언트에 적용됩니다. 우리는 근원을 다루는 유일한 사람들입니다.관리되는 버전의 프로젝트 조직

각 클라이언트는 비즈니스 로직에서 표시까지 많은 사용자 정의가 필요하지만 모든 클라이언트는 client_id 열과 구분되는 특정 회사 정보가있는 데이터베이스 테이블을 공유한다는 점에서 모두 기본적으로 동일합니다.

새로운 코드의 구성을 둘러싼 두 가지 아이디어가 있으며 접근법과 장단점의 차이점에 대해 머리를 감싸는 데 어려움을 겪고 있습니다. 이 점을 더 잘 이해하면 도움이 될 것입니다.

1) 응용 프로그램 기능을 각각의 git 저장소에 저장하십시오. 이 조각들 사이의 의존 관계를 관리하기위한 모든 응용 프로그램 기능을위한 인터페이스를 만듭니다. PHP 패키지 관리자 인 Composer로 이러한 응용 프로그램 구성 요소를 관리하면 클라이언트가 모든 구성 요소와 해당 구성 요소의 버전을 포함하는 패키지 목록으로 구성됩니다. 단일 응용 프로그램에서 모듈을 변경해야하는 경우 해당 모듈을 포크하여 새 패키지/저장소를 만듭니다. 변경 사항이 여러 모듈에 걸쳐있는 경우 여러 개의 새 리포지토리를 만들고이를 작성자 패키지로 게시 한 다음 새 패키지를 클라이언트 매니페스트에 추가합니다.

2) 응용 프로그램 전체에 대한 git 저장소를 만듭니다. 각 클라이언트에 대해 분기 (또는 분기)를 만듭니다. 클라이언트 별 변경 사항은 포크를 사용하십시오. 모든 클라이언트를 변경하려면 기본 저장소를 사용하고 각 클라이언트에 대해 필요에 따라 업스트림 저장소를 클라이언트 저장소에 병합하십시오.

개발 팀에 장기적인 관리 효율성과 유연성을 제공하는 접근 방법은 무엇입니까? 고려해야 할 대체 방법이 있습니까? 현재 로선 계층 적 시스템과 오랫동안의 학대로 인해 클라이언트 특정 변경과 시스템 전체 변경을 모두 수행하기가 어렵습니다.

+0

(당신의 # 1 제안에 설명 된대로) 완전히 다른 저장소입니다 서브 모듈 -에 - 더 - 코어 및 한 - repo- 클라이언트 당 사람, 나 자신. – jthill

답변

2

첫 번째 방법은 구성 요소 접근 방식 I detailed here과 비슷합니다. 종속성을 추가

는 자식의 repo에 자식을 통해 설치 :

의 차이는 Composer FAQ가 있음을 시사 한 이후, 나는 보통 제안대로 git submodule에 의존 할 필요가 없습니다 mignt 의미 PHP는 작곡가를 사용하는 것입니다 그들을 submodules으로 표시합니다.
실제 서브 모듈이 아니기 때문에 문제가 발생하며 문제가 발생할 수 있습니다.

망할 놈의 서브 모듈은 (없음 부모의 repo 내에서 변화의 그룹 관리에) 여전히 필요할 수 있지만 작곡가는이를 지원하지 않기 때문에, 당신은 "How do I use a Git submodule with a Composer loaded library?"에 대한 답을 확인할 수 있습니다.

접근법 1은 장기간의 관리 성과 유연성 측면에서 더 좋은 방법이지만, 처음에는 상당한 재구성 작업이 필요할 수 있습니다.

2

gitflow을 사용할 수도 있습니다.

# 2에서 지적한대로 고객 당 여러 개의 "마스터"& "릴리스"브랜치를 가질 수 있지만 모든 "고객"에게 수정 사항, 기능 등을 추가 할 수있을만큼 유연합니다. 이것은 실제로이 모델의 가지입니다.

두 번째 옵션은 서브 모듈/서브 트리를 사용하는 것입니다하지만, 각 서브 모듈은 난