users.txt
SVN 사용자를 Git에 맵핑하기위한 사용자 파일 (예 :)을 작성하십시오.
user1 = First Last Name <email@address.com>
user2 = First Last Name <email@address.com>
...
이 단일 라이너를 사용하여 기존 SVN 저장소에서 템플릿을 작성할 수 있습니다.
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt
파일에없는 SVN 사용자가 없으면 SVN이 중지됩니다. 그러나 그 후에는 파일을 업데이트하고 중단 한 부분을 선택할 수 있습니다.
이제 저장소에서 SVN 데이터를 가져옵니다.
git svn clone --stdlayout --no-metadata --authors-file=users.txt svn://hostname/path dest_dir-tmp
이 명령은 새로운 Git 저장소를 생성 dest_dir-tmp
하고 SVN 저장소를 가져 오기 시작합니다. "--stdlayout"플래그는 일반적인 "trunk /, branches /, tags /"SVN 레이아웃을 의미합니다. 레이아웃 다릅니다은, 익숙해 경우 --tags
, --branches
, --trunk
옵션 (일반적으로 git svn help
).
모든 공통 프로토콜이 허용됩니다 svn://
, http://
, https://
. URL은 http://svn.mycompany.com/myrepo/repository 와 같은 기본 저장소를 대상으로해야합니다 . URL 문자열은 있어야 하지 포함 /trunk
, /tag
또는 /branches
.
이 명령을 실행 한 후에는 작업이 "중단 / 정지"된 것처럼 보이는 경우가 많으며 새 리포지토리를 초기화 한 후 오랜 시간 동안 중단 될 수 있습니다. 결과적으로 마이그레이션 중임을 나타내는 로그 메시지가 표시됩니다.
또한이 생략하면 참고 --no-metadata
플래그를 커밋 메시지에, 힘내 해당 SVN 개정에 대한 정보를 추가합니다 (예 git-svn-id: svn://svn.mycompany.com/myrepo/<branchname/trunk>@<RevisionNumber> <Repository UUID>
)
사용자 이름을 찾을 수 없으면 users.txt
파일을 업데이트 한 후 다음을 수행하십시오.
cd dest_dir-tmp
git svn fetch
대규모 프로젝트가있는 경우 모든 Subversion 커밋을 가져올 때까지 마지막 명령을 여러 번 반복해야 할 수도 있습니다.
git svn fetch
완료되면 Git은 SVN trunk
을 새로운 지점으로 체크 아웃합니다 . 다른 지점은 리모컨으로 설정됩니다. 다음을 사용하여 다른 SVN 분기를 볼 수 있습니다.
git branch -r
저장소에 다른 원격 브랜치를 유지하려면 각 원격 브랜치를 수동으로 작성하려고합니다. (건너 뛰기 트렁크 / 마스터)이 작업을 수행하지 않으면 마지막 단계에서 분기가 복제되지 않습니다.
git checkout -b local_branch remote_branch
# It's OK if local_branch and remote_branch are the same name
태그는 분기로 가져옵니다. 로컬 브랜치를 생성하고, 태그를 만들고, 브랜치를 삭제하여 Git에서 태그로 사용하십시오. "v1"태그로이를 수행하려면 :
git checkout -b tag_v1 remotes/tags/v1
git checkout master
git tag v1 tag_v1
git branch -D tag_v1
GIT-SVN 저장소를 깨끗한 Git 저장소로 복제하십시오.
git clone dest_dir-tmp dest_dir
rm -rf dest_dir-tmp
cd dest_dir
원격 브랜치에서 이전에 생성 한 로컬 브랜치는 원격 브랜치로만 새로운 복제 된 리포지토리에 복사됩니다. (건너 뛰기 트렁크 / 마스터) 유지하려는 각 지점에 대해 다음을 수행하십시오.
git checkout -b local_branch origin/remote_branch
마지막으로, 삭제 된 임시 저장소를 가리키는 클린 Git 저장소에서 원격을 제거하십시오.
git remote rm origin