중앙 집중식 SCM 시스템에서 GIT로 전환하고 있습니다. 좋아, 내가 어느 것을 인정할 것이다, 그것은 Visual SourceSafe이다. 그래서 Git 명령어와 워크 플로우의 학습 곡선을 넘어서서, 현재 내가 직면하고있는 가장 큰 문제는 여러 저장소의 단일 또는 일부 특성과 관련하여 현재 저장소를 Git으로 마이그레이션하는 방법이다.전통적인 n 계층 설계에서 여러 프로젝트가있는 Git 저장소에 대한 베스트 프랙티스
나는이 질문을 여러 가지 방법으로 묻는 것을 보았지만 일반적으로 기본적인 것 ... "저급 라이브러리를 공유하려는 응용 프로그램이 있습니다."그리고 미리 준비된 응답은 항상 "별도의 저장소 사용"이며//이 패턴을 언제/왜 사용해야하는지에 대한 많은 설명없이 "Git submodules 사용하기"(그것이 무엇을 극복합니까, 그것은 무엇을 제거합니까?) 지금까지 제한된 지식/Git에서 읽은 것에서는 서브 모듈 자체가있을 수 있습니다 특히 Git을 처음 접한 사람에게 악마가 싸울 수 있습니다.
그러나 아직 뻔뻔스럽게 묻는 질문은 "각 계층이 자체 프로젝트 인 기존의 n 계층 개발 (UI, 비즈니스, 데이터 및 공유 도구)이있을 때, 하나 또는 여러 개의 저장소를 사용합니까? " 거의 항상, 새로운 '기능'이 추가되면 코드가 각 레이어을 통해 리플 (ripple)을하기 때문에 나에게 명확하지 않습니다.
Git과 관련된 문제를 복잡하게하기 위해 우리는 개발자의 관점에서보다 관리하기 쉬운 프로젝트/구성 요소를 만들기 위해이 프레임 워크를 '프레임 워크'에 복제했습니다. 이 토론의 목적을 위해 전체 '제품'을 나타내는 이러한 프로젝트/레이어 '타히티'컬렉션을 호출 할 수 있습니다.
우리 셋업의 마지막 '레이어'는 타히티를 맞춤형/확장하는 클라이언트 웹 사이트/프로젝트를 추가 한 것입니다.
/Clients
/Client1
/Client2
/UI Layer
/CoreWebsite (views/models/etc)
/WebsiteHelper (contains 'web' helpers appropriate for any website)
/Tahiti.WebsiteHelpers (contains 'web' helpers only appropriate for Tahiti sites)
/BusinessLayer (logic projects for different 'frameworks')
/Framework1.Business
/Framework2.Business
/DataLayer
/Framework1.Data
/Framework2.Data
/Core (projects that are shared tools useable by any project/layer)
/SharedLib1
/SharedLib2
우리는 여러 프로젝트와 전통적인 n 계층 디자인에 확장 한 방법을 설명 후, 나는 당신이 만든 어떤 결정에 어떤 경험을 찾고 있어요 : 같은 폴더 구조에서이 대표하는 최고의 보일 수 있습니다 비슷한 상황 (심지어 간단한 UI, 비즈니스, 데이터 분리 모두 당신이 사용했던 것)과 당신의 결정 때문에 더 쉽고/힘들었습니다. 서브 모듈에 약간의 고통이있을 수있는 방법에 대한 예비 시험에 내가 맞습니까? 혜택을받을 가치가있는 것보다 더 많은 고통이 있습니까?
내 직감은 Tahiti ('클라이언트 프로젝트'를 제외한 모든 프로젝트)에 대한 하나의 저장소에 대한 것이고 각 클라이언트에 대한 하나의 저장소입니다. 내가 생각하는 전체 타히티 소스는 < 10k 파일이어야합니다. 다음은 개인의 프로젝트/파일 '대'기능 '의 역사를 추적 할, 심지어 우리의 사업 분리와 힘내에서 즉, 내 추론 (그리고 나는 비판 환영)
- 그것은 나에게 보인다' 기능 '은 항상 여러 프로젝트에 걸쳐 있습니다.
- 핵심 사이트에서 코딩 된 '기능'은 거의 항상 핵심 웹 사이트와 모든 프로젝트에 '프레임 워크'(예 : CoreWebsite, Framework1.Business, Framework1.Data)를 최소한으로 적용합니다.
- 기능은 여러 프레임 워크 (우리가 구현하는 기능의 10 %가 CoreWebsite, Framework1.Business, Framework1.Data, Framework2.Business, Framework2.Data)에 걸쳐 있다고합니다. 비슷한 방식으로 기능을 1 또는 2로 변경해야 할 수도 있습니다. 더 많은 SharedLib 프로젝트 및/또는 'UI 웹 사이트 도우미'프로젝트.
- 클라이언트의 사용자 지정 코드를 변경하면 거의 항상 해당 리포지토리에서만 로컬이므로 '전체 기능 변경 집합'이 무엇인지 확인하기 위해 다른 구성 요소에 대한 변경 내용을 추적 할 필요가 없습니다.
- 기능이 전체 범위를보기 위해 프로젝트에 걸쳐 있다고 가정 할 때 각 프로젝트가 자체 저장소 인 경우 리포지토리의 모든 코드 변경을 분석하는 것이 어려울 것으로 보입니까?
미리 감사드립니다.
우리는 똑같은 문제를 겪고 있으며, [git subtree] (https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt)를보고 그 중 의존성. – Sardathrion