약 30 명의 클라이언트를 지원하는 중간 크기의 HMVC 웹 응용 프로그램을 리팩토링하기 시작했습니다. 현재이 코드는 SVN 저장소의 단일 분기로 관리됩니다. 때로는 변경 사항이 클라이언트마다 다르며 다른 경우에는 변경 사항이 모든 클라이언트에 적용됩니다. 우리는 근원을 다루는 유일한 사람들입니다.관리되는 버전의 프로젝트 조직
각 클라이언트는 비즈니스 로직에서 표시까지 많은 사용자 정의가 필요하지만 모든 클라이언트는 client_id 열과 구분되는 특정 회사 정보가있는 데이터베이스 테이블을 공유한다는 점에서 모두 기본적으로 동일합니다.
새로운 코드의 구성을 둘러싼 두 가지 아이디어가 있으며 접근법과 장단점의 차이점에 대해 머리를 감싸는 데 어려움을 겪고 있습니다. 이 점을 더 잘 이해하면 도움이 될 것입니다.
1) 응용 프로그램 기능을 각각의 git 저장소에 저장하십시오. 이 조각들 사이의 의존 관계를 관리하기위한 모든 응용 프로그램 기능을위한 인터페이스를 만듭니다. PHP 패키지 관리자 인 Composer로 이러한 응용 프로그램 구성 요소를 관리하면 클라이언트가 모든 구성 요소와 해당 구성 요소의 버전을 포함하는 패키지 목록으로 구성됩니다. 단일 응용 프로그램에서 모듈을 변경해야하는 경우 해당 모듈을 포크하여 새 패키지/저장소를 만듭니다. 변경 사항이 여러 모듈에 걸쳐있는 경우 여러 개의 새 리포지토리를 만들고이를 작성자 패키지로 게시 한 다음 새 패키지를 클라이언트 매니페스트에 추가합니다.
2) 응용 프로그램 전체에 대한 git 저장소를 만듭니다. 각 클라이언트에 대해 분기 (또는 분기)를 만듭니다. 클라이언트 별 변경 사항은 포크를 사용하십시오. 모든 클라이언트를 변경하려면 기본 저장소를 사용하고 각 클라이언트에 대해 필요에 따라 업스트림 저장소를 클라이언트 저장소에 병합하십시오.
개발 팀에 장기적인 관리 효율성과 유연성을 제공하는 접근 방법은 무엇입니까? 고려해야 할 대체 방법이 있습니까? 현재 로선 계층 적 시스템과 오랫동안의 학대로 인해 클라이언트 특정 변경과 시스템 전체 변경을 모두 수행하기가 어렵습니다.
(당신의 # 1 제안에 설명 된대로) 완전히 다른 저장소입니다 서브 모듈 -에 - 더 - 코어 및 한 - repo- 클라이언트 당 사람, 나 자신. – jthill