2010-03-29 4 views
31

내 자식 저장소는 다음과 같은 구조를 가지고 가정 :git 저장소의 일부를 추출 하시겠습니까?

/.git 
/Project 
/Project/SubProject-0 
/Project/SubProject-1 
/Project/SubProject-2 

및 저장소 꽤 커밋이있다. 이제 하위 프로젝트 중 하나 (SubProject-0)가 상당히 커 졌으므로 SubProject-0을 꺼내 독립 실행 형 프로젝트로 설정하려고합니다. 하위 git 저장소에서 SubProject-0과 관련된 모든 커밋 기록을 추출하여 새 저장소로 옮길 수 있습니까?

+2

이 내용은 http://stackoverflow.com/questions/359424/detach-subdirectory-into-separate-git-repository의 복제본입니다 (Jim DeLaHunt의 답변에서와 같이). –

답변

36

난 당신이 저장소의 복제에

git filter-branch --subdirectory-filter Project/SubProject-0 --prune-empty -- --all 

뭔가를해야한다고 생각 http://git-scm.com/docs/git-filter-branch

를 참조하십시오.

+0

감사합니다. 매력처럼 작동합니다! – Rio

+2

@Rio'--prune-empty' 옵션을 사용하여'Project/SubProject-0' 만 터치 한 커밋을 삭제할 수도 있습니다. –

+0

와우는 완벽하게 작동합니다! 덕분에 – alvatar

1

비슷한 일을해야했지만 본질적으로 하나의 하위 프로젝트를 다른 저장소로 옮기고 싶었습니다. 대신에 모든 소스에서 객체를 가져올 수 있으므로 가져 오기를 사용했습니다.

그래서 기본적으로 새 분기를 만들었고 그 분기에서 불필요한 항목을 삭제 한 다음 git fetch를 사용하여 분기를 한 저장소에서 다른 저장소로 가져 왔습니다. 일단 개체가 있으면 병합이 트릭을 수행했습니다.

예.

cd /path/to/other/repository 
    git fetch /path/to/source/repo temp:temp 

온도 : 임시 수단

git checkout -b temp master 
    git rm -r Unneeded_stuff 
    git commit -m 'pruning' 

이 그럼 당신은 (무관) 완전히 다른 하나에 하나 개의 저장소에서 해당 분기를 가져올 수 있습니다 원래 물건이있는 저장소에

"소스에 temp를 가져 와서 여기에 temp로 저장하십시오." 거기에서 결과를 마스터에 병합 할 수 있습니다.

git merge temp 

당신은 당신이 지금까지 원래의 repo에 병합 할 일이 아닙니다 첫 번째 경우에 때문에, 임시 지점을 삭제할 수 있고, 두 번째 경우에 당신은 그것을 합병했다.

이 단계를 약간 압축 할 수 있지만이 세트가 훌륭하고 분명 해 보입니다.

+0

오래 된 게시물에 대해 당신을 괴롭히지 않아서 죄송합니다. 그러나 이것은 OP와는 달리 유용하지만 다른 질문에 답하고 있습니다. 이 답변에 대한 새로운 q/a 쌍을 만들 수 있습니까? 그것은 훨씬 쉽게 찾을 수 있습니다. – tacaswell

+0

그리고 필터 방법을 사용하여 이동하려는 파일 만 포함하는 임시 리포지토리를 만든 다음이 방법으로 임시 리포지토리의 병합 단계를 수행하는 것이 원본 레포의 전체 내역 마지막 커밋과 같이 삭제 단계가 있음). – tacaswell