2015-01-23 2 views
0

저는 git를 처음 접했고 기존 프로젝트를 git로 옮겨야했습니다. 내가 가진 문제는 그것이 실제로 2 개의 프로젝트라는 것입니다. 프로젝트를 "One"이라고 부르 자. 하나는 실제로보고 사이트뿐 아니라 개별 프로젝트에서 사용되는 코드 템플릿 그룹입니다 (보고 사이트에서 프로젝트간에 표준 보고서를 실행할 수 있음). 우리는 dev &보고 서버에서보고 사이트를 실행하고 dev 및 프로덕션 서버에 코드 템플릿을 갖고 싶습니다. 그래서, 때로는 두 저장소가 필요하며, othertimes은 1. 하나는이 같은 코드 구조로 작성되었습니다 :프로젝트를 여러 git 리포지터리로 분할

/one (generic main dir, no files, only sub-dirs) 
    /onesource (PHP source code for the reporting site) 
    /onerept (reports run by the reporting site) 
    /onelib  (templates) 
    /oneinc  (include files used by templates) 
    /oneadmn (files used by both) 

그래서,보고 사이트 저장소가 OneSource의 및 onerept 하위 DIRS을 포함 할 것, 동안 템플릿 저장소는 onelib 및 oneinc 디렉토리를 포함하려고합니다. 필요한 경우 oneadmn dir을 서버간에 공유 마운트로 만들 수 있습니다. 모든 것은 현재 공유 마운트로 설정되어 있지만 여러 가지 이유로 나쁘다.

어떻게 이것을 git에서 설정합니까?

답변

1

두 환경에서 동일한 git 저장소를 사용하는 것이 실제로 위험합니까? 기술적이지 않은 정책상의 이유로 왜 다른 저장소가 필요한지를 제외하고는 모든 저장소를 단일 저장소에두고 각 상황에서 필요한 것을 사용하는 데 아무런 해가 없습니다. 이것은 가장 간단한 일이며 혼란을 최소화합니다.

다른 옵션은 다음과 같습니다

1) 각 환경에 대해 별도의 분기를 만듭니다. 동일한 자식 저장소를 사용하지만 각 환경마다 다른 분기를 사용하십시오.

2) 여러 git 저장소를 만듭니다. 공유 된 부분을위한 하나의 git 저장소와, 개별적인 부분을위한 하나 이상의 다른 자식 저장소 (git repositories); 또는 별도의 부품을위한 단일 저장소를 다른 지점으로 유지할 수 있습니다.

git이 실제로 잘 처리하지 못하는 한 가지 - 서로 다른 저장소의 계층 구조를 함께 붙인 것입니다. 내 프로젝트 중 하나에서 몇 가지 최상위 소스 리포지토리와 일부 공유 모듈로 구성된 두 번째 접근 방식을 사용했습니다. 각 최상위 프로젝트는 원래 프로젝트의 개별 분기입니다. 최상위 프로젝트에서 작업하려면 주 저장소를 새 작업 디렉토리에 복제 한 다음 작업 디렉토리의 "libs"하위 디렉토리에서 공유 모듈 저장소를 복제하십시오.

이것은 실제로 이상적인 시나리오는 아니지만 일반적으로 작동합니다. 그냥 조금 조직해야하고 "libs"하위 디렉토리는 별도의 자식 저장소 (git repository)라는 것을 기억하십시오.

"onelib"과 "oneinc"를 두 번째 자식 저장소로 이동하고이를 "공유"라는 별도의 하위 디렉토리로 복제합니다. 이 경우 "shared/onelib"및 "shared/oneinc"를 참조하도록 나머지 코드를 변경해야합니다.

2

표준 규칙은 다음과 같습니다. 개발, 버전 관리 및 함께 출시되는 모든 것은 하나의 저장소에 저장됩니다. 결과적으로 독립적 인 버전 번호를 가진 프로젝트의 일부가 자체 repo에 들어갑니다.

왜냐하면 git의 브랜치와 태그는 항상 저장소 전반 (Subversion과 달리)이기 때문입니다.

이 규칙에 따라 모든 것이 하나의 거대한 repo에 들어가야한다고 말하고 싶습니다.당신은 사본이 필요한 부분 만 일부 배포 프로세스를 가질 수 중 하나, 아니면 그냥 모든 것을 체크 아웃 : 어떤 데이터가있는 서버에 필요하기


. 귀하의 질문에서 그것은 모든 것을 사용할 수 있도록 해칠 것 같지 않습니다.

특정 서버에서 특정 디렉토리 구조가 필요한 경우 여하튼 배포 문제입니다. 저장소는 배포가 아닌 개발 용으로 준비되어야합니다. 배포는 나중에 제공되며 자체 도구 세트가 있습니다.