커밋 기록을 잃지 않고 SVN에서 GIT로 코드를 마이그레이션하는 방법은 무엇입니까?
이 질문에 이미 답변이 있습니다.
코드를 SVN 저장소에서 GIT 저장소로 이동하여 개발자 팀을 전환하고 GIT 사용을 시작하는 권장 방법을 알고 싶습니다.
전환을 수행하고 SVN 저장소에서 수행 된 모든 커밋을 유지할 수 있습니까?
또한 우리 팀은 현재 SVN에 만족하고 있지만 GIT에서 분기하는 것이 SVN보다 훨씬 쉽다는 것을 모릅니다. 분기에서 GIT의 힘을 입증하는 실용적인 예를 어디서 찾을 수 있습니까?
Eric Raymond (esr)는 "버전 제어 이력에 대해 까다로운 편집 작업을 수행하기위한 명령 인터프리터" 리포 저온 을 만들었습니다 . 이 도구에는 VCS 변환 결과 정리를 포함하여 다양한 목적을위한 스크립트가 포함되어 있습니다. https://gitlab.com/esr/reposurgeon 에서 확인 하십시오 .
버전 2.0부터 Git, Mercurial 등으로의 완전하고 관용적 인 번역을 위해 SVN 덤프 파일 읽기 지원이 포함됩니다 . 자세한 내용은 http://esr.ibiblio.org/?p=4071 을 참조하십시오. Reposurgeon은 저장소가 Emacs를 포함하여 몇 개의 대규모 프로젝트를 Git으로 변환하는 데 사용되었습니다. 저장소는 ESR이 말합니다. ESR은“크고 브랜치 구조가 복잡하며 CVS 저장소로 시작하기에 충분히 오래되었습니다. 마지막 부분은 Subversion 프로젝트의 역사에 숨어있는 가장 추악한 번역 문제 중 일부가 cvs2svn에 의해 생성 된 이상한 Subversion 작업 시퀀스 (분기 복사 작업 조합 포함)이기 때문에 중요합니다.”
(Git에 포함 된 git-svn 도구는 브랜치를 포함하여 많은 Subversion 저장소를 처리합니다. 이는 Git이 Subversion 클라이언트로 동작 할 수 있기 때문에 특히 변환을 진행중인 팀에서 꽤 일반적으로 사용됩니다. 그러나 ESR을 참조하십시오. git-svn!으로 svn-to-git 저장소 변환을 수행하지 마십시오. 여기서 그는 변환 도구로서 git-svn의 단점을 논의합니다.)
두 번째 질문과 관련하여 Git의 힘이 그토록 도움이되는 부분이 아닙니다 (Git는 이와 관련하여 적어도 Subversion만큼 강력하지만). Git이 빛나는 브랜치 를 병합 할 때 입니다. 관통 읽기 힘내 커뮤니티 도서 , 특히 "이라는 제목의 장 3 절 기본 분기 및 병합 "와 "장 제목 7 절 고급 병합 ".
이미 많은 사람들이 git-svn을 사용하고 있기 때문에 가능하다고 말할 수 있습니다. 다음 명령은 잘 알려져 있습니다.
git svn clone -s http://svn/repo
매뉴얼 (로컬로 확인 됨) 에 따르면 "트렁크, 태그 및 브랜치"가 유지됩니다.
2014 년 4 월 업데이트
Svn2Git 이라는 도구가 있어이 과정을 좀 더 쉽게 만들어줍니다. Github 프로젝트에 대한 문서는 꽤 좋습니다. ( 루비 필요 )
git-svn은 기본적으로 분기, 태그 및 트렁크가 아닌 지정한 경로에서 가져 오는 것으로 설정되어 있습니다. Svn2git은 그 반대입니다. 기본적으로 경로 아래에서 트렁크, 브랜치 및 태그 를 찾게되며이를 사용 --nobranches
하거나 --notags
검색하지 않도록 지시 해야합니다 (이는 svn2git의 장점을 무효화 할 수 있음).
Git으로 이동하면 모든 사람을 이동하고 Git을 계속 사용하는 것이 좋습니다. 더 복잡하지만 전환은 그만한 가치가 있습니다. Github.com은 Subversion 클라이언트를 사용하여 리포지토리에 액세스하는 것을 지원하며 (하지만 Git 브랜치의 기능을 잃을 수 있음) 이는 좋은 임시 방편이 될 수 있습니다.
내 Subversion 저장소를 유지할 수 있습니까?
아래 방법을 사용하여 이동하면 현재 모든 커밋이 Subversion 저장소에 남아 있습니다. Subversion 리포지토리에서 Git 리포지토리로 단방향 동기화를 수행 할 수 있지만 다른 방식으로 이동하면 매우 복잡해집니다. 어느 쪽이든 동기화를 시도하지 않고 모든 사람을 한 번만 이동하는 것이 좋습니다.
Git의 강력한 점은 무엇입니까?
Git 분기는 강력하지만 Git의 모든 기능이 아닙니다. 로컬에 완전한 히스토리가 있다는 것은 서버에 접속할 필요없이 Subversion으로 할 수있는 모든 작업을 수행 할 수 있음을 의미합니다. 기록 검토 및 검색, 변경 취소, 로컬 커밋, 로컬 분기가 훨씬 빨라집니다. Git은 또한 데이터를 압축하므로 Subversion 체크 아웃 (최신 버전 만 포함)은 Git 체크 아웃 (전체 기록 포함)과 거의 동일한 크기가됩니다. 또한 데이터가 전송 될 때 압축되기 때문에 밀고 당기는 것도 훨씬 빠릅니다. Git 브랜치를 푸시하지 말고 Git에 대한 모든 것을 넣으십시오.
방법을 사용하여 저장소를 이동하는 git svn
방법.
먼저 Subversion 저장소를 복제합니다. 시간이 걸릴 수 있습니다.
git svn clone http://www.example.com/svn-repo/projectA/trunk/
http://www.example.com/svn-repo/
Subversion 저장소에 대한 URL은 어디에 있으며 projectA/trunk/
Git에 복사하려는 경로입니다.
당신은 다음과 같은 표준 레이아웃이있는 경우 projectA/trunk
, projectA/branches/
그리고 projectA/tags/
보다 당신은 추가 할 수 있습니다 --stdlayout
같은 디렉토리로부터 및 복제
git svn clone --stdlayout http://www.example.com/svn-repo/projectA/ projectA.git-svn
그리고 위와 다른 이름의 트렁크, 브랜치 및 태그 폴더가있는 경우 git svn clone
각각에 대해 사용자 지정 이름을 제공합니다.
git svn clone --trunk my-trunk --branches my-branches --tags my-tags http://www.example.com/svn-repo/projectA/ projectA.git-svn
완료되면 .NET을 사용하여 원격 git 저장소에 푸시하기 만하면됩니다 --mirror
.
cd projectA.git-svn
git push --mirror git@github.com:Account/projectA.git
이 시점에서 사람들이 오래된 위치에 커밋하지 못하도록 Subversion 저장소를 읽기 전용으로 만들어야합니다.
를 사용하는 태그 및 모든 분기를 포함하여 리포지토리를 완전히 변환 할 수 있습니다 git svn clone
.
올바른 태그를 얻기 위해 약간의 조정 이 필요합니다. 자세한 내용 은 이 링크 를 참조하십시오.
이 주제는 적어도 한 번 전에 여기에서 다루었습니다.
svn 브랜치와 태그를 git-svn으로 가져 오는 방법?
Svn에서 Git으로의 안전하고 원활한 마이그레이션 방법은 서버 측 Git / Svn 동기화 도구 인 SubGit 을 사용하는 것 입니다. Subversion 저장소에 SubGit을 설치하고 마이그레이션 프로세스가 지속되는 한 Subversion과 Git을 동시에 계속 사용할 수 있습니다.
면책 조항 : 저는 이미 반년 동안 행복하게 SubGit을 사용하는 SubGit 개발자입니다.
먼저 subversion으로 변환 한 다음 git로 변환하여 CVS 저장소를 git로 다시 마이그레이션했습니다. 이것은 적절한 도구를 사용할 때 잘 작동했습니다.
Eclipse 프로젝트가 포함 된 CVS 저장소를 git로 변환하는 가장 강력한 방법을 참조하십시오 .
또한 완료되면 엄격하게 테스트하십시오.
Regarding git branching, that is not the smart part. The advantage come when you need to merge branches.
John Albin wrote some good scripts here and here that will do the whole conversion for you (including author conversion). The scripts are not perfect (I had some hickups with multiple branches and especially with svn externals).
Atlassian actually wrote a guide on the svn to git migration (and they have good tutorials on those pages too).
git is very powerfull but there is one caveat: up till now git doens't have anything so easy as svn:externals. There are alternatives (git subtree and git submodules) but they never work as intuitively as svn externals (but that is for another question: look around on stackoverflow you will find many questions related to this topic)
'developer tip' 카테고리의 다른 글
golang지도를 통해 반복 (0) | 2020.10.30 |
---|---|
CSS3 전환 : "전환 : 모두"가 "전환 : x"보다 느립니까? (0) | 2020.10.30 |
양식 입력을 사용하여 카메라에 액세스하고 웹 앱을 사용하여 즉시 사진 업로드 (0) | 2020.10.30 |
angular.isdefined의 이점은 무엇입니까? (0) | 2020.10.30 |
자바 스크립트의 x> = x 패턴 (0) | 2020.10.30 |