2014-09-02 8 views
2

(1) 어떻게 하나의 github에서 다른 git repo로 두 개의 Subversion repos를 변환합니까? gitk 출력이 의미가 있도록 역사가 인터리브되기를 원합니다!github에서 googlecode의 두 subversion repos를 하나의 git repo로 변환하십시오.

(2) 단지 git clone 대신 svnadmin 덤프를 사용하여 이동하려는 이유는 무엇입니까?

(3) 새 리포지토리가 이전 리포지토리 쌍과 일치하는지 테스트하려면 어떻게해야합니까?

두 개의 Subversion 저장소가 http://acl2-devel.googlecode.com/svnhttp://acl2-books.googlecode.com/svn이고 두 저장소가 모두 표준 svn 레이아웃 (트렁크, 분기, 태그)으로 설정되어 있다고 가정합니다. 또한 깨끗한 휴식을 원하고 지점과 태그에 대한 새로운 시작을 원한다고 가정하십시오.

답변

1

(1) 다음은 두 repos를 단일 git repo에 결합한 메타 레벨 논의입니다.

  • 덤프 svnsync 및 svnadmin
  • 를 사용하여 두 서브 버전 저장소는 책이 책에 장착 REPO와
  • 는 SVN 저장소에서 모든 브랜치와 태그를 제거 하위 디렉토리에 새로운 SVN 저장소를 생성합니다 (그러나 그들의 역사를 떠나)
  • 사용하여 역사에 지사 및 태그에 대한 모든 참조를 제거 GitHub의 계정 이메일 주소와 일치하는 이메일을 정규화, 자식에 svn의 REPO 변환 "BFG "
  • 는"책까지
  • 새로운 만들기 수준의 이동을 몇 년 전 내부 서버에서 이동을 수용하기 위해 "루트에 ACL2 시스템 트렁크까지의 이동을 자식 역사를 다시 작성하고, REPO 및 "체리 - 선택"은 4000은 멋지게 역사를

위의 구현에서 오랫동안 사용할 수있는 스크립트를 GitHub의에 결과 REPO를 밀어

  • 을 주문 만들 타임 스탬프의 순서로 커밋 : https://github.com/ragerdl/svn-to-git/blob/master/convert-acl2-books-svn-and-acl2-devel-svn-to-git.sh

    (2) 두 저장소에서 git svn clone을 사용한 다음 병합하는 것이 어떻습니까?

    내가 체리 선택 단계에 도달했을 때, 많은 충돌이 있었기 때문에. 이 순서대로 수행하면 이러한 충돌을 피할 수 있습니다.

    (3) 모든 저장소에 대해 각 저장소의 수를 두 저장소에서 동일하게 유지하여 저장소를 테스트 할 수 있습니다. diff를 수행 할 수도 있습니다. 이러한 작업을 수행하는 스크립트는 https://github.com/ragerdl/svn-to-git/blob/master/quality-assurance.sh을 참조하십시오.

    필자는 복사 + 붙여 넣기 코드가 좋지만 실제로는 너무 많다는 것을 알고 있으며 이것은 내 첫 번째 커팅입니다. 다른 사람이 내가 작성하고 여기에 붙여 넣은 스크립트를 정리하고 싶다면, 고맙겠습니다. 나는 이것을 다른 사람들의 게시물을 읽는 데 많은 시간을 허비했음을 제외하고는 사회에 부가 가치가 있다고 생각하지 않았습니다. 나는이 질문에 대한 답을 찾을 수 없었습니다. 따라서이 답변은 검색 엔진에서 쉽게 찾을 수있는 어딘가에 있어야한다고 생각합니다.