SVN을 Git으로 마이그레이션하는 방법
Unsplash에 있는 Markus Winkler의 사진
저는 최근에 코드베이스를 SVN에서 GitHub로 마이그레이션하는 것을 포함하는 마이그레이션 프로젝트를 진행하고 있었습니다. 몇 번의 시행착오와 웹에서 모범 사례를 검색하는 데 많은 시간을 보낸 끝에 마침내 프로세스 중에 눈물을 흘리지 않는 시스템을 개발했으며 이를 여러분과 공유하는 것이 좋겠다고 생각했습니다.
이 마이그레이션 프로세스를 4개의 간단한 단계로 분류했습니다.
환경 준비
로컬 머신에서 새 git repo를 호스팅할 GitMigration 폴더를 생성합니다: mkdir -p ~/GitMigration
다른 명령줄에서 SVN 저장소를 업데이트하여 최신 개정판이 있는지 확인합니다. 또한 마이그레이션을 시작하고 있으며 마이그레이션 프로세스가 완료될 때까지 더 이상 커밋을 SVN에 푸시할 수 없음을 팀에 알리는 것이 좋습니다.
완료되면 authors.txt 파일을 만들어야 합니다. 이렇게 하면 SVN 사용자 이름이 다음 형식으로 원하는 Git 사용자 이름에 매핑됩니다.
jdoe = John Doe <[email protected]>
esmith = Emma Smith <[email protected]>
SVN에서 모든 작성자를 수동으로 찾고 싶지 않다면 다음 명령을 사용하여 SVN 저장소에서 데이터를 가져올 수 있습니다. 최종 형식이 위와 동일한 구조를 따르는지 확인하십시오.
svn log -q | awk -F '|' '/^r/ {gsub(/ /, "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors.txt
SVN 저장소를 로컬 git 저장소로 변환
특정 기간의 커밋만 마이그레이션하려면 SVN 저장소에서 개정 번호를 찾아야 합니다. 이렇게 하려면 svn repo 폴더에서 다음 명령을 실행하십시오.
svn log -r {YYYY-DD-MM}:HEAD --limit 1
GitMigration 폴더 내에서 다음 명령을 실행합니다.
git svn clone <svn-repo>/<project> <git-repo-name> --authors-file=authors.txt -r <revision-number>:HEAD
여기서 <svn-repo>는 마이그레이션하려는 SVN 리포지토리의 URI이고,
이제 태그와 원격 참조를 로컬 브랜치로 이동하여 정리합니다. 태그를 적절한 Git 태그로 이동하려면 git repo 디렉토리 내에서 다음을 실행합니다.
for t in $(git for-each-ref --format='%(refname:short)' refs/remotes/tags); do git tag ${t/tags\//} $t && git branch -D -r $t; done
다음으로 refs/remote 아래의 모든 참조를 이동하고 로컬 브랜치로 전환합니다.
for b in $(git for-each-ref --format='%(refname:short)' refs/remotes); do git branch $b refs/remotes/$b && git branch -D -r $b; done;
for p in $(git for-each-ref --format='%(refname:short)' | grep @); do git branch -D $p; done;
대용량 파일을 lfs 객체로 변환
GitHub의 파일 제한은 100MB이며, 이 크기를 초과하는 파일은 GitHub에 푸시되지 않습니다. 이것이 Git Large File Storage (LFS)이 들어오는 곳입니다. Git LFS는 파일 내용을 원격 서버에 저장하는 동안 Git 내부의 모든 대용량 파일을 텍스트 포인터로 바꿉니다. LFS를 사용하면 다음과 같은 많은 이점이 있습니다.
100MB 제한을 초과하는 파일 수를 확인하려면 다음 명령을 실행하십시오.
git lfs migrate info --everything --above=99MB
이렇게 하면 99MB 표시를 초과하는 저장소의 다양한 파일 유형에 대한 정보가 출력됩니다(아래 참조).
파일을 LFS 파일 객체로 변환하려면 다음 명령을 실행하십시오.
git lfs migrate import --everything --above=99MB
이렇게 하면 99MB를 초과하는 파일이 포함된 git repo의 기록을 다시 작성하고 이를 LSF 개체로 변환합니다.
새 git 리포지토리를 GitHub에 푸시합니다.
마지막 단계는 원격 git 서버를 추가하고 변경 사항을 푸시하는 것입니다.
git remote add origin git@my-git-server:myrepository.git
git push origin --all;
git push origin --tags;
그리고 그게 다야! 축하합니다. SVN 저장소를 Git로 마이그레이션했습니다. 다음 단계는 마이그레이션이 완료되었음을 팀에 알리고 새로운 원격 git 서버에 대한 액세스를 제공하는 것입니다.
Reference
이 문제에 관하여(SVN을 Git으로 마이그레이션하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/melishatrout/how-to-migrate-svn-to-git-5hde텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)