2012-05-21 3 views
3

표준 git svn clone 이상을 허용하는 범용 svn -> git 마이그레이션 스크립트를 작성하는 중입니다. 스크립트의 한 단계에서 git svn show-externalsgit svn show-ignore의 출력을 매번 확인하고 있습니다. 이주 저장소의 분기 및 해당 명령의 출력에 따라 다양한 단계를 수행하십시오.git svn show-ignore/show-externals가 왜 그렇게 느린가요?

내 문제는 이제 내 스크립트의 나머지 부분은 꽤 빠르지 만 특히이 두 명령은 내 실행 시간의 대부분을 차지하는 것처럼 보입니다. 경우에 따라 git svn show-externals이 (약 5000 개의 파일이 포함 된 레포에서) 실행하려면 10 분 이상 소요됩니다. 10 개 이상의 브랜치가있는이 크기의 저장소에서 실행하면 상당히 합산된다고 상상할 수 있습니다.

이 작업을 실행하는 데 시간이 오래 걸리는 이유는 무엇입니까? 실행 속도를 높이기 위해 할 수있는 일이 있습니까?

답변

4

"git svn show-ignore"는 디렉토리 당 추가 SVN 요청을 수행합니다.

이동 목적으로 SubGit 도구를 사용하고 싶습니다. 그것은 모든 개정판에 대해 svn : ignore -> .gitignore를 번역합니다 (또한 svn : eol-style, tags 등을 번역합니다). 유일한 제한 : 저장소에 로컬 액세스 SVN이 필요합니다. 따라서 svnrdump 도구와 함께 사용할 수 있습니다. 로컬로 SVN repostiory가있는 경우 마이그레이션은 한 단계로 수행됩니다.

$ subgit install path/to/svn/repo 
+0

"디렉토리 당 추가 SVN 요청을 수행합니다." - 정말로 디렉토리마다? 왜 전체 트리에 대해 하나의 재귀 적'svn propget -R svn : ignore'를 수행하지 않는가? – Rup

+0

유용 할 수 있습니다. 나는 외관을 서브 모듈로 변환하는 것을 지원하지 않는다는 것을 알아 차렸다. 그것에 관한 어떤 제안? – majackson

+2

Rup : git-svn 스크립트의 "cmd_show_ignore"기능을 살펴보십시오. 그것은 "prop_walk"를 호출합니다. 그런 다음 "prop_walk"정의를 살펴보십시오. $ self-> ra-> get_dir ($ path, $ rev)를 호출합니다. - 디렉토리에 대한 속성 및 하위 항목을 가져 오는 메소드입니다. 그런 다음 "prop_walk"는 디렉토리 인 모든 자식에 대해 자체를 호출합니다. 매우 이상하지만 사실입니다. –

관련 문제