2013-05-17 4 views
6

의 그들에 어떤 파일이 명 자식 저장소를 가정 해 봅시다 : 하위 트리에서 하위 트리 병합을 수행 할 수 있습니까?

ProjectA 
+ a 
+ b 

ProjectB 
+ foo/x 
+ foo/y 
+ bar/z 

는 지금은 PROJECTAProjectB에서 디렉토리 foo을 포함 할.

지금까지 내가 git subtree addprefix을 수행 할 때 내가 이해가 수신 저장소에 있어야한다 경로입니다, 그래서

git subtree add --prefix=project_b --squash URL_of_ProjectB 

을 할 때 나는 끝낼 것

ProjectA 
+ a 
+ b 
+ project_b 
    + foo/x 
    + foo/y 
    + bar/z 

이 레이아웃을 얻기 위해 foo 만 가져 왔으면 어떻게 든 지정할 수 있습니까?

ProjectA 
+ a 
+ b 
+ project_b 
    + x 
    + y 

답변

5

나는 이것을 git subtree으로 수행 할 수 없다고 생각한다.

git remote add b <URL_TO_B> 
git fetch b 
git checkout -b b_master b/master 
foo를 포함 b의 역사를 다시 작성

: 어쩌면 git filter-branch는 당신이 필요로하는 것입니다

git filter-branch --prune-empty --subdirectory-filter foo b_master 

또는 git subtree split

git subtree split -P foo --branch foo 

를 사용하고 하위 트리 등으로 추가를

git subtree add --prefix=project_b --squash b_master or foo 
+0

ProjectB의 추가 변경 사항을 ProjectA로 병합하는 프로세스가 변경됩니까? 내 시나리오가 정확히 '자식 하위 트리'가 무엇일까하는 생각이 들지만, 그렇지 않다면 무엇을 할 수 있습니까? 어쩌면 필자는 파일 레이아웃을 더 잘 맞게 변경할 수 있습니다. – AndreKR

+0

예, ProjectB의 변경 내용을 ProjectA에 병합 할 때마다 필터 분기 단계를 다시 실행해야합니다. 'git subtree '의 맨 페이지는'git split' 명령을 설명합니다. 이것은'filter-branch' 명령과 비슷합니다. 그러나 레이아웃을 변경할 수 있다면'foo'를 별도의 저장소에 뽑아서 두 프로젝트에 하위 트리로 추가하는 것이 더 나을 것입니다. 'b'가 일종의 lib이기 때문에 아마도 더 좋을까요? – gregor

+0

그게 문제 야, 그건 진짜가 아니야. 만약 그렇다면, 나는 그것을 서브 모듈로 만들 것이다. 그것은 두 개의 프로젝트 ... 국가 목록, 일부 템플릿 등으로 공유되는 약간의 코드입니다. – AndreKR

관련 문제