2012-05-05 5 views
2

약간 지저분한 svn 저장소를 git로 변환하려고합니다. 나는 약간의 가이드와 다른 SO 질문을 읽으려고했지만, 따라야 할 최선의 방법에 관해서는 조금 길을 잃었다.지저분한 svn 저장소를 자식으로 변환

SVN 저장소는 폴더와 최상위 폴더 구조 같은 것을 가지고

|- client 
|- server 
|- website 
|- misc 

해당 폴더의 대부분은 '표준'svn의 구조를 가지고 : 즉 trunk, branchestags. 그러나 일부는 단순한 폴더입니다.

|- client 
    |- trunk 
    |- branches 
    |- tags 
|- server 
    |- trunk 
    |- branches 
    |- tags 
|- website 
|- misc 

가지와 태그는 서로 다른 폴더간에 이름이 같을 수 있습니다. 예를 들어 클라이언트 폴더와 서버 폴더 모두 1.0이라는 브랜치를 가질 수 있습니다.

나는 svn2git을 사용하여 개별 폴더를 변환 할 수 있었으며, 잘된 점뿐만 아니라 기록을 얻은 것으로 보인다. 각 폴더에 대해 개별 자식 저장소를 생성 할 수 있습니다. 그러나, 나는 모든 것을 하나의 저장소에 보관하고 싶습니다.

분기, 태그 및 각 폴더의 기록을 유지하면서 그 폴더 (현재 git 저장소)를 하나로 병합하는 가장 좋은 방법은 무엇입니까? this approach을 사용하면 병합 저장소와 저장소의 커밋 기록과 분기가 모두 손실 된 것 같습니다. 아니면 중요한 단계가 누락되었거나 잘못 처리 한 것일 수 있습니다.

그렇지 않으면을 각 폴더에 별도로 사용하면 svn에서 git로 마이그레이션하는 것이 가장 좋은 방법이 아닌 것일까 요?

답변

1

결국 나는 this answer에서 접근 방식을 선택했습니다.

본질적 :

  • 는 (포함
  • 각 프로젝트를 추가로 SVN 저장소에서 각 서브 폴더 (사용 svn2git) 모든 저장소 병합 새로운 자식 저장소를 생성

  • 대한 자식 프로젝트 만들기

    git remote add alpha <url/path-to-alpha-repo> 
    git remote add bravo <url/path-to-bravo-repo> 
    git remote add charlie <url/path-to-charlie-repo> 
    for r in $(git remote); do 
        git config remote.$r.fetch \ 
        "$(git config remote.$r.fetch | sed -e 's.remotes.heads/all.')" 
        git config --add remote.$r.fetch \ 
        "$(git config remote.$r.fetch | sed -e 's.heads.tags.g')" 
        git config remote.$r.tagopt --no-tags 
    done 
    git remote update 
    
  • 원격 REPOS에 병합 된-저장소를 밀어 : 원격으로 모든 지점) itory (지금부터는 '공식 저장소'가 될 것입니다.)

0

나는 힘내으로 변환하기 전에 다음과 같은 구조 에 SVN 저장소를 다시 작성합니다 :

- trunk 
    |-client 
    |-server 
    |-website 
    `-misc 
- branches 
    |-client 
    |-server 
    |-website 
    `-misc 
- tags 
    |-client 
    |-server 
    |-website 
    `-misc 

이 당신의 SVN 저장소를 재구성하려면 svnadmin dump에 파일 저장소를해야합니다, 모든 경로를 업데이트 그 파일을 읽고 svnadmin load 새 덤프 파일로 업데이트 된 덤프 파일.

덤프 파일의 구조를 살펴보십시오. 실제로 구조 조정은 검색/대체를 지원하는 편집기로 쉽게 수행 할 수 있습니다. 아스키 메타 데이터 외에도 덤프 파일에는 원시 바이너리 데이터 (저장소에있는 바이너리 파일)가 포함되어 있기 때문에 이진 안전성이 필요합니다.

+0

감사합니다. 흥미로운 접근 방법처럼 들리지만 안전하게 할 수있는 리소스/도구에 대해 알고 있습니까? 나는 svn 덤프에 대한 빠른 견해를 가지고 있었고 어디에서 시작해야하는지 정말로 알지 못했다. (예를 들어, 클라이언트와 서버의 동일한 이름을 가진 두 개의 분기를 병합하는 것과 관련된 문제는 ...) – gingerlime

+1

http : // svn. apache.org/repos/asf/subversion/trunk/notes/dump-load-format.txt - 덤프 파일에서'Node-path'를 검색하십시오. 복사/이동 작업을 수행했다면,'Node-copyfrom-path'도 관련이 있습니다. – ThiefMaster

+0

이 물건은 내 머리를 통해 완벽하게 정직하게 보인다 ... svn 내부 덤프 형식으로 어지럽히는 같은 거대한 규모로 일부 정규식 검색/바꾸기를하는 것은 정확히 내가 바라는 해결책이 아닙니다. 그래도이 방향을 제안 해 주셔서 감사합니다! – gingerlime

관련 문제