수색…


Atlassian 변환 유틸리티를 사용하여 SVN에서 Git으로 마이그레이션

여기 에서 Atlassian 변환 유틸리티를 다운로드 하십시오 . 이 유틸리티에는 Java가 필요하므로 변환을 수행하려는 시스템에 Java Runtime Environment JRE가 설치되어 있는지 확인하십시오.

java -jar svn-migration-scripts.jar verify 명령을 사용하여 컴퓨터에서 변환을 완료하는 데 필요한 프로그램이 누락되어 있는지 확인하십시오. 특히이 명령은 Git, Subversion 및 git-svn 유틸리티를 확인합니다. 또한 대소. 자 구분 파일 시스템에서 이주를 수행하는지 확인합니다. Git으로의 마이그레이션은 저장소 손상을 피하기 위해 대소 문자를 구분하는 파일 시스템에서 수행해야합니다.

다음으로 작성자 파일을 생성해야합니다. Subversion은 커미터의 사용자 이름으로 만 변경 내용을 추적합니다. 힘내, 그러나, 두 가지 정보를 사용하여 사용자를 구별 : 실제 이름과 이메일 주소. 다음 명령은 Subversion 사용자 이름을 해당 Git에 매핑하는 텍스트 파일을 생성합니다.

java -jar svn-migration-scripts.jar authors <svn-repo> authors.txt

여기서 <svn-repo> 는 변환하려는 Subversion 저장소의 URL입니다. 이 명령을 실행하면 authors.txt 의 식별 정보가 authors.txt 매핑됩니다. 전자 메일 주소는 <username>@mycompany.com 입니다. 작성자 파일에서 각 사용자의 기본 이름 (기본적으로 사용자 이름이 된)을 실제 이름으로 수동으로 변경해야합니다. 계속하기 전에 모든 이메일 주소의 정확성을 확인하십시오.

다음 명령은 svn repo를 Git으로 복제합니다 :

git svn clone --stdlayout --authors-file=authors.txt <svn-repo> <git-repo-name>

여기서 <svn-repo> 는 위에서 사용 된 것과 동일한 저장소 URL이고 <git-repo-name> 은 저장소를 복제 할 현재 디렉토리의 폴더 이름입니다. 이 명령을 사용하기 전에 몇 가지 고려 사항이 있습니다.

  • 위의 --stdlayout 플래그는 Git에게 trunk , branches , tags 폴더가있는 표준 레이아웃을 사용하고 있음을 알려줍니다. 비표준 레이아웃을 가진 Subversion 저장소는 trunk 폴더, 모든 / branch 폴더 및 tags 폴더의 위치를 ​​지정해야합니다. git svn clone --trunk=/trunk --branches=/branches --branches=/bugfixes --tags=/tags --authors-file=authors.txt <svn-repo> <git-repo-name> .
  • 이 명령은 Repo의 크기에 따라 완료하는 데 몇 시간이 걸릴 수 있습니다.
  • 대규모 저장소의 변환 시간을 줄이기 위해 변환은 네트워크 오버 헤드를 제거하기 위해 Subversion 저장소를 호스팅하는 서버에서 직접 실행할 수 있습니다.

git svn clone 은 subversion 태그 ( tags/ 붙은 원격 브랜치)를 포함한 원격 브랜치로 서브 버전 브랜치 (및 트렁크)를 임포트합니다. 이것을 실제 브랜치 및 태그로 변환하려면 Linux 시스템에서 다음 명령을 제공된 순서대로 실행하십시오. 실행 후, git branch -a 는 올바른 브랜치 이름을 보여 주어야하며 git tag -l 은 저장소 태그를 보여 주어야한다.

git for-each-ref refs/remotes/origin/tags | cut -d / -f 5- | grep -v @ | while read tagname; do git tag $tagname origin/tags/$tagname; git branch -r -d origin/tags/$tagname; done
git for-each-ref refs/remotes | cut -d / -f 4- | grep -v @ | while read branchname; do git branch "$branchname" "refs/remotes/origin/$branchname"; git branch -r -d "origin/$branchname"; done

svn에서 Git로 변환이 완료되었습니다! 로컬 repo를 서버에 push 하고 Git을 사용하여 계속 기여할 수있을뿐만 아니라 svn에서 완전히 보존 된 버전 기록을 유지할 수 있습니다.

서브 겟

SubGit 은 git에 SVN 저장소의 일회성 가져 오기를 수행하는 데 사용될 수 있습니다.

$ subgit import --non-interactive --svn-url http://svn.my.co/repos/myproject myproject.git

svn2git을 사용하여 SVN에서 Git으로 마이그레이션

svn2gitgit-svn을 통해 git의 원시 SVN 지원에 대한 Ruby 래퍼입니다. Subversion에서 Git으로 프로젝트를 마이그레이션하고, 내역 (트렁크, 태그 및 분기 내역 포함)을 유지할 수 있도록 도와줍니다.

예제들

표준 레이아웃 (예 : 저장소의 루트 수준에서 분기, 태그 및 트렁크)으로 svn 저장소를 마이그레이션하려면 다음을 수행하십시오.

$ svn2git http://svn.example.com/path/to/repo

표준 레이아웃에없는 svn 저장소를 마이그레이션하려면 다음을 수행하십시오.

$ svn2git http://svn.example.com/path/to/repo --trunk trunk-dir --tags tags-dir --branches branches-dir

분기, 태그 또는 트렁크를 마이그레이션 (또는 보유하지 않음)하려는 경우가 아니라면 --notrunk , --nobranches--notags 옵션을 사용할 수 있습니다.

예 : $ svn2git http://svn.example.com/path/to/repo --trunk trunk-dir --notags --nobranches 는 트렁크 기록 만 이전합니다.

새 저장소에 필요한 공간을 줄이려면 추가하지 않은 동안 추가 한 디렉토리 나 파일을 제외 할 수 있습니다 (예 : 디렉토리 또는 아카이브 빌드).

$ svn2git http://svn.example.com/path/to/repo --exclude build --exclude '.*\.zip$'

마이그레이션 후 최적화

새로 생성 된 git 저장소에 이미 수천 건의 커밋 (또는 그 이상)이있는 경우 원격 저장소에서 저장소를 푸시하기 전에 사용되는 공간을 줄여야 할 수 있습니다. 이 작업은 다음 명령을 사용하여 수행 할 수 있습니다.

$ git gc --aggressive

주 : 이전 명령은 커다란 저장소 (수만 커밋 및 / 또는 수백 메가 바이트 이력)에서 최대 몇 시간이 소요될 수 있습니다.

TFVC (Team Foundation Version Control)에서 Git으로 마이그레이션

Git-TF라는 오픈 소스 도구를 사용하여 Team Foundation 버전 제어를 git으로 마이그레이션 할 수있다. 또한 마이그레이션은 tfs 체크 인을 git 커밋으로 변환하여 기존 기록을 전송합니다.

Git-TF를 사용하여 솔루션을 Git에 배치하려면 다음 단계를 따르십시오.

Git-TF 다운로드

Codeplex에서 Git-TF를 다운로드 (및 설치) 할 수 있습니다 : Git-TF @ Codeplex

TFVC 솔루션 복제

powershell (win)을 실행하고 명령을 입력하십시오.

git-tf clone http://my.tfs.server.address:port/tfs/mycollection '$/myproject/mybranch/mysolution' --deep

--deep 스위치는 Git-Tf가 체크인 기록을 복사하도록 알려주기 때문에주의해야 할 keeyword입니다. 이제 clo 명령을 호출 한 폴더에 로컬 자식 저장소가 있습니다.

대청소

  • .gitignore 파일을 추가하십시오. Visual Studio를 사용하는 경우 편집기에서이 작업을 수행 할 수 있습니다. 그렇지 않으면 github / gitignore 에서 전체 파일을 다운로드하여 수동으로 수행 할 수 있습니다.
  • 솔루션에서 TFS 소스 제어 바인딩을 제거합니다 (* .vssscc 파일 모두 제거). GlobalSection (TeamFoundationVersionControl)을 제거하여 솔루션 파일을 수정할 수도 있습니다 ...... EndClobalSection

커밋 및 푸시

로컬 저장소를 커밋하고 리모컨으로 푸시하여 전환을 완료하십시오.

git add .
git commit -a -m "Coverted solution source control from TFVC to Git"

git remote add origin https://my.remote/project/repo.git

git push origin master

Mercurial에서 Git으로 마이그레이션하기

Mercurial Repo를 Git 으로 가져 오려면 다음과 같은 방법을 사용할 수 있습니다.

  1. 빠른 내보내기 사용 :
cd
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD
  1. Hg-Git 사용 : 매우 자세한 대답은 https://stackoverflow.com/a/31827990/5283213입니다.

  2. 사용 GitHub의의 수입을 :의 (세부) 지침에 따라 GitHub의를 .



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow