2010-01-29 6 views
1

우리 팀에 cvs 리포지토리가 있으며, cvs2svn을 통해 svn으로 변환되었습니다. 우리 저장소에는 트렁크로 효과적으로 기능하는 주된 지사 (main)가 있습니다 (비록 과거에는 기술적으로 트렁크에서 떨어져 있었지만).cvs2svn 마이그레이션 후 svn 병합 문제가 발생했습니다.

cvs2svn 변환 후 main에서 branch으로 분기했습니다.

나는 branch에 작은 변화를 만든 다음 main로 다시 branch을 병합하려고 시도 :

[~/main] svn merge https:.../branch 

이 분할이 일어난 이후 branch에 DIFF을 계산하고, main에 그 DIFF를 적용해야합니다. 그러나 2 년 전으로 거슬러 올라가면 엄청난 갈등이 생깁니다.

해결 방법에 대한 의견이 있으십니까? Google을 샅샅이 뒤졌지만 아무것도 찾을 수 없습니다.

나는 svn merge를 호출하여 정확한 개정 번호를 전달할 수 있음을 알고있다. 나는 더 나은 대안을 찾고있다.

+0

문제점이 cvs2svn 변환에 연결되어 있다고 의심 할 이유가 없습니다. – mhagger

+1

svn 병합은 올바르게 작동하는 정확한 조상 정보에 따라 다릅니다. cvs에는 해당 정보가 없기 때문에 cvs2svn은 정보를 추측합니다. 내가 읽은 것으로부터 일반적으로 좋지만 가지의 가지에 문제가 있습니다. – dshin

답변

0

svn에게 병합 지점이 무엇인지 병합하도록 알려줘야 만 메인에 동기화 할 커밋 범위를 알 수 있습니다. 범위를 지정하지 않았으므로 HEAD 개정판을 통한 커밋 범위가 기본값입니다. 이로 인해 수정 횟수가 너무 많습니다.

이것은 당신이에서 동기화됩니다 이전 커밋 개정 얻을 것이다 : 기본적으로

svn log --xml --stop-on-copy https://.../branch | grep 'revision=' | head -n 1 | sed 's/.*revision="\([0-9][0-9]*\)".*/\1/g' 

, (I는 "REV"전화 할게) 분기에 첫 번째 사본 버전을 가져옵니다. 그런 다음 (기본 디렉토리에) 당신의 '주'사본의 머리 개정이 병합됩니다 다음 '지점'에 HEAD를 통해 REV에서 모든 변경 사항을 적용해야

cd main 
svn merge https://.../branch:REV https://.../branch:HEAD . 

는 '주'복사에 복사합니다. 브랜치 (branch)에서 메인 (main)까지의 반복적 인 병합 (merges)에도 문제가 없습니다.

건배!