2016-08-24 3 views
0

현재 Git에 SVN 저장소를 가져오고 있습니다. SVN 저장소의 구조는 조금 지저분하므로 3 개의 별도의 Git 저장소로 변환 한 다음 모두 함께 병합해야합니다. 이러한 하나의 역사를 세 부분으로 간단한 프로젝트라면이식 된 Git 내역에 병합 도입하기

, 나는 그냥 다른, 예를 들어 위에을 리베이스 수 있습니다

cd part3 
git remote add -f part1 url_to_part1 
git remote add -f part2 url_to_part2 
git rebase part2/master 
git rebase part1/master 

그러나 part3 내 위의 예에서 포함 태그 수십 세 가지. 부품 1과 2가 SVN 내에서 master (잘, 트렁크)으로 깔끔하게 병합 되었다면, this과 같은 것을 사용하여 분기를 이력에 올바르게 이식합니다. 리베이스 (rebase)와는 달리 모든 태그가 그대로 유지되는 이점이 있습니다.

그러나 분기 중 하나에 고아가 된 커밋이있어 이제는 병력에 병합하고 싶습니다. 이제 내가 이식편으로 병력을 고치려고하면 고아가 된 커밋의 변화가 사라집니다. 아래 예제에서, X에서 C 로의 병합은 SVN에서 발생 했으므로 접목으로 링크를 만들 수 있습니다. 그러나 나는 내가 이식이 파일 같은 것을 사용하여 그래프 구조를 지정할 수있는 방법이 있나요 커밋 E, G 등

A-B-C-[ ]-D-E-F-G-H-... 
\// 
    X--O 

에 태그를 유지하면서, C와 D 사이에 분리 된 커밋 O를 병합 할 그런 다음 실제로 묵시적 병합을 실행합니까? 아니면 여기에 사용해야하는 필터 분기 명령이 있습니까?

+0

[이 질문에 대한 참고] (http://stackoverflow.com/questions/3810348/setting-git-parent-pointer-to-a-different-parent/3811028#3811028) 제안 할 수 없습니다. 이식편. 태그를 리버스 (rebase) 한 다음 수동으로 이동해야합니다. – jkeirstead

답변

1

git-svn이 아닙니다. 리포지토리의 일회 변환에 적합한 도구입니다. Git을 기존 SVN 서버의 프론트 엔드로 사용하려는 경우 훌륭한 도구이지만 일회성 변환의 경우 이 아닌git-svn을 사용해야하지만 svn2git은이 사용 사례에 훨씬 적합합니다.

svn2git이라는 pleny 도구가 있는데, 아마도 가장 좋은 도구는 https://github.com/svn-all-fast-export/svn2git의 KDE입니다. 그 svn2git 도구를 사용하는 것이 좋습니다. 내가 사용할 수있는 최선의 방법이며, 규칙 파일을 통해 할 수있는 일에 매우 유연합니다.

svneverever에서 http://blog.hartwork.org/?p=763까지의 기록은 Git으로 마이그레이션 할 때 SVN 저장소의 기록을 조사하는 훌륭한 도구입니다.

실행 파일 하나에서 전체 SVN 저장소를 적절한 Git 저장소로 변환 할 수있는 방식으로 규칙 파일을 작성할 수 있습니다.

+0

명확히하기 위해 하나의 SVN 저장소에 대해 세 가지 다른 매개 변수 세트를 사용하여 svn2git을 사용한 다음 단일 svn2git 명령이 SVN 저장소의 비표준 레이아웃에 맞지 않기 때문에 함께 결과를 결합하려고합니다. – jkeirstead

+0

분명히하기 위해, 당신은 ** 내가 추천 한 svn2git 유틸리티를 사용하지 않고있다 ** 그렇지 않으면 당신이하려고하는 것처럼 농구대를 뛰어 넘을 필요가 없다. ;-) – Vampire