2014-08-29 2 views
6

this excellent answer에 따라 전체 내역을 유지하면서 자체 저장소에 하위 디렉토리를 추출했습니다. 나는 단지 src/mathtests/math 디렉토리를 포함하는 새 분기를 만들Git 하위 트리가 두 개의 디렉토리로 나뉘어졌습니다.

src/ 
    http/ 
    math/ 
tests/ 
    http/ 
    math/ 

: 같은

내 저장소 보인다.

나는 다음과 같은 명령을 실행하는 경우 : 그것은 src/math 디렉토리의 내용을 포함하는 분기를 만들지 만 src/math/ 접두사를 삭제

git subtree split -P src/math -b math 

합니다.

나는 두 개의 디렉토리와 같은 명령을 시도 할 경우 :

git subtree split -P src/math -P tests/math -b math 

그것은 단지 tests/math의 내용, src/math을 무시하고, 또한 tests/math 접두사를 폐기를 추출합니다. 원래의 디렉토리 구조를 유지하지만, 명시 적으로 명령 줄에 언급되지 않은 모든 일들을 폐기한다

src/ 
    math/ 
tests/ 
    math/ 

: 요약하면

, 내가 같이 내 최종 저장소를하고 싶습니다.

어떻게하면됩니까?

+1

Downvoter, 왜 그런지 설명해 주시겠습니까? – Benjamin

+1

나는 Downvoter가 질문을 이해하지 못했을 것 같아. –

+0

이것은 정확히 http://stackoverflow.com/questions/2982055/detach-many-subdirectories-into-a-new-separate-git-repository의 dup이 아니지만 같은 결과를 요구합니다. 여기에있는 질문은'git subtree split '에 관한 것입니다. 첫 번째 대답의 절차를 따랐으니 매력처럼 작동합니다. – Hilikus

답변

3

필요에 따라 git filter-branch으로 벗어날 수 있습니다.

나는 당신이 달성하고자하는 것이 무엇인지 잘 모르겠지만, 단순히 두 개의 디렉토리가 제거 된 저장소를 갖고 싶다면 (역사상?) 이것이 가장 좋은 기회 일 것입니다.

도 참조하십시오. Rewriting Git History.

$ git filter-branch --tree-filter 'rm -rf tests/http src/http' --prune-empty HEAD 

이 각 커밋으로보고이 커밋에서 두 개의 디렉토리를 제거합니다. 이렇게하면 기록을 다시 쓰고 (예 : 커밋을 변경 함) 다른 저장소와 공통 기록이있는 경우 두통을 유발할 수 있습니다.

+0

사실, 내 예제는 단순화 된 것이므로 'http'와 'math'보다 많은 폴더가 있습니다. 내가 유지할 항목을 지정하고 삭제할 항목을 지정할 수있는 방법이 있습니까? – Benjamin

+0

본질적으로 거기에 bash 스크립트를 넣을 수 있습니다. 'rm'이 당신이 원하는 것을 다룰 수 있습니까? 강타 할 수 있어요, 네. 여러분의 요구 사항에 맞게'find '를 사용하는 방법을 찾으십시오. http://www.gnu.org/software/findutils/manual/html_mono/find.html – Alex

+0

또한 정규 표현식을 사용하여 디렉토리와 일치시킬 수 있습니다. 'rm'에게 무엇을 삭제 할지를 알려주는 것이 ** 더 간단하고 ** 빠릅니다 **. – Alex

관련 문제