[svn] 재 통합은 소스 X를 재 통합하기 위해 X에서 Y까지의 개정판 X가 이전에 <URL>에서 병합 된 경우에만 사용할 수 있지만, 그렇지 않습니다.

Tortoise 1.6과 함께 SVN 분기를 사용했습니다. 트렁크를 지점에 정기적으로 병합하여 최신 상태로 유지했습니다.

오늘 저는 지점을 다시 통합 할 것이라고 생각했습니다. Tortoise에서 “Reintegrate a branch”를 선택하고 다음 오류 메시지가 표시되었습니다.

재 통합은 개정 4709-5019가 이전 http://subversion/svn/saxdev/trunk에 재 통합 소스 에서 병합 된 경우에만 사용할 수 있지만, 그렇지 않습니다.

그런 다음 약 50 개의 파일을 다음과 같은 설명과 함께 나열했습니다.

Error: branches/qst/kobalt/sax/businessobjects/util/HistoryParent.java

Error: Missing ranges: /trunk/kobalt/sax/businessobjects/util/HistoryParent.java:4709-5018

개정판 5019는 헤드 개정판입니다. 개정 4737은 지점을 만들 때의 개정이었습니다.

나는 개정판 4737에 대한 로그에서 이것을 가지고있다.

조치 : 추가 된 경로 : / branches / qst 경로에서 복사 : / trunk

나에게 그 오류 메시지는 지점이 원래 트렁크에서 나온 것이 아니라고 말합니다.

어떤 아이디어?



답변

지점에서 작업 중이고 다른 작업과 함께 최신 상태로 유지 한 경우 트렁크의 작업 사본을 작성하고 다음과 같은 메시지가 표시되면 지점을 다시 통합 할 때주의를 기울일 수 있습니다.

$ svn merge --reintegrate https://server.blah/source/orb/branches/bronze_services
svn: Reintegrate can only be used if revisions 650 through 694 were previously merged from
     https://server.blah/source/orb/trunk to the reintegrate source, but this is not the
     case:
  branches/bronze_services/occl
    Missing ranges: /trunk/occl:650-693

Google에서 여러 가지 해결 방법을 보았지만 ‘해킹’으로 긴장했습니다. 그것을 해결하기 위해 메시지에서 어떤 Subversion이 암시하고 있는지 확인하기로 결정했습니다. 지점으로 돌아가서 지정된 개정을 명시 적으로 병합했습니다.

$ svn merge -r 650:693 https://server.blah/source/orb/trunk
$ svn commit -m 'merged revisions 650:693 from trunk'
    Sending        occl
Committed revision 695.

이 작업을 수행 한 후에는 트렁크의 작업 복사본으로 돌아와 아무런 문제없이 지점을 다시 통합 할 수있었습니다.

이게 도움이 되길 바란다


답변

[[과거에는 저의 솔루션이 효과가 있었지만 현대 SVN 고객에게는 부적절한 결과를 초래할 수 있습니다. 우리의 경우 병합 오류는 실제 활동이 아닌 SVN 기록을 혼란스럽게하는 자동화의 부산물 인 것처럼 보였습니다. 나는 이것을 후손을 위해 여기에두고 있지만 대신 허용되는 대답을 고려하십시오. ]]

나를위한 해결책은 svn:mergeinfo어떻게 든 계층 구조의 개별 파일에 첨부되는 모든 속성 을 제거하는 것이 었습니다 .

svn merge --reintegrate svn+ssh://svn/usr/local/svn/repos/all/trunk
svn: Reintegrate can only be used if revisions 18765 through 18921 were
    previously merged from svn+ssh://svn/usr/local/svn/repos/all/trunk to the
    reintegrate source, but this is not the case:
trunk/proj/src/main/java/com/foo/furniture.java
Missing ranges: /trunk/proj/src/main/java/com/foo/furniture.java:18765-18920

mergeinfo 정보가있는 파일을 찾으려면 다음을 수행하십시오.

cd ~/svn/branches/2.7
svn propget -R svn:mergeinfo .

그런 다음 mergeinfo 속성을 제거 할 수 있습니다.

svn propdel svn:mergeinfo proj/src/main/java/com/foo/furniture.java ...
svn commit -m 'removed mergeinfo' proj/src/main/java/com/foo/furniture.java ...

이 작업을 완료 한 후 병합이 제대로 실행되었습니다.


답변

분기를 트렁크에 다시 통합하려고하면 TortoiseSVN에서 다음과 같은 오류가 표시됩니다.

병합 재 통합 테스트 만 실패했습니다! : "일부 개정이 트렁크에서 이전에 병합 된 경우에만 재 통합을 사용할 수 있지만 그렇지 않습니다."

오류 텍스트를 클릭하고 CTRL+ A, CTRL+ C를 눌러 모든 텍스트를 복사하십시오.

이 PowerShell 스크립트의 here-string에 텍스트를 붙여 넣습니다.

@"
Command: Reintegrate merge http://svn.cloudcorp.com/branches/myproject into C:\Users\iain\Documents\Repositories\CloudCorp\trunk
Error: Reintegrate can only be used if revisions 18089 through 18612 were previously
Error:  merged from http://svn.corp.skyscanner.local/svn/SkyScannerDatabase/trunk to
Error:  the reintegrate source, but this is not the case:
Error:
Error:  branches/myproject/userdata/usermanagementservice
Error:
Error:     Missing ranges:
Error:  /trunk/userdata/usermanagementservice:18365,18404
Error:
Error:  branches/myproject/userdata/auto_create_db.sql
Error:
Error:     Missing ranges:
Error:  /trunk/userdata/auto_create_db.sql:18406
Error:
Error:
Error:  branches/myproject/userdata/create_audit_tables_triggers_uds.sql
Error:
Error:     Missing ranges:
Error:  /trunk/userdata/create_audit_tables_triggers_uds.sql:18406
"@ -split "`n" |
? { $_ -match ('Error: +branches') } |
% { $_.Substring($_.IndexOf('userdata')) } |
% { "svn propdel svn:mergeinfo $_" }

스크립트는 mergeinfo 문제가있는 파일의 상대 경로를 추출하고 각 명령을 수정하기위한 명령 목록을 출력합니다.

'userdata'저장소 구조에 맞게 값 을 변경해야 할 수도 있습니다 .

스크립트를 실행하여 문제 mergeinfos를 제거하는 데 필요한 명령을 출력하십시오.

이 예제에서 스크립트는 다음과 같은 출력을 생성합니다.

svn propdel svn:mergeinfo userdata/usermanagementservice
svn propdel svn:mergeinfo userdata/auto_create_db.sql
svn propdel svn:mergeinfo userdata/create_audit_tables_triggers_uds.sql

명령 프롬프트에서 지점 기본 (myproject)으로 이동하고 명령을 실행하여 문제 병합 정보를 삭제할 수 있습니다.

다음과 같은 출력이 표시되어야합니다.

property 'svn:mergeinfo' deleted from 'userdata\usermanagementservice'.
property 'svn:mergeinfo' deleted from 'userdata\auto_create_db.sql'.
property 'svn:mergeinfo' deleted from 'userdata\create_audit_tables_triggers_uds.sql'.

에서와 같이 회색의 대답 , 지금은 분기에 변경 사항을 적용하고 다시 재 통합을 시도해야합니다. 이번에는 작동합니다!


답변

실제로 “두 가지 분기 병합”옵션을 사용하여 트렁크와 분기를 작업 사본에 병합하도록 수정했습니다. 그런 다음 트렁크에 커밋했습니다.

기이


답변

거북이 SVN에서 나를 위해 일한 것 : 지점의 모든 개정을 병합하는 대신 특정 범위를 선택하고 지점에서 모든 개정을 수동으로 선택하십시오.


답변

SVN이 말한대로하십시오.

  1. SVN이 알려주는 Reversion에서 브랜치 병합
  2. 지점에서 트렁크로 재 통합

답변

비슷한 경우에 대한 나의 경험에 대해서는 여기의 대답을 참조하십시오 . 이것이 문제의 원인인지 확실하지 않지만 Subversion 1.8에서 두 변경 사항이 서로를 취소 할 때 mergeinfo에 문제가있는 것처럼 보입니다.