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


127

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

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

어떤 아이디어?


1
괜찮아. 나는 더 이상 Subversion을 사용하지 않지만 그것을 위해 당신의 단어를 취할 것입니다!
colinjwebb

1
고마워 친구. 페이지가 더 좋다고 생각합니다.
회색

답변:


138

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

$ 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.

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

이게 도움이 되길 바란다


16
좋은! "메시지에서 어떤 Subversion이 암시하고 있는지 확인하십시오." :)
Adam

7
더 인기있는 답변은 유혹적이지만, 올바르게 고치는 것이 더 낫습니다. 문제가있는 특정 파일과 svn merge트렁크에서 가져 가야했습니다 .
Steve Kehlet

1
이것은 나를 위해 잘 작동했습니다. 주요 트릭은 거북이가 문제 수정을 알려주지 않았다는 것입니다. 내 명령 줄 svn 클라이언트를 업그레이드 한 후 나에게 당신처럼 메시지를 줄 수 있었고 문제 수정본을 병합하고 트렁크로 돌아갈 수있었습니다.
user12861

7
나열된 "누락 된"병합이 지점에서 이미 수행 되었기 때문에이 방법이 효과가 없었습니다 (재 통합 소스).
Sam

6
이 답변은 합리적으로 들리지만 나에게는 효과가 없었습니다. 같은 오류 메시지가 계속 나타납니다. 도움이 된 것은 허용 된 답변이 제안하는 것처럼 나열된 파일에서 svn : mergeinfo 속성을 제거하는 것이 었습니다.
Jenny O'Reilly

85

[[과거에는 저의 솔루션이 효과가 있었지만 현대 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 ...

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


2
이것은 실제로 문제를 해결하는 데 도움이되었지만 루트 폴더 에서이 작업을 수행하는 대신 하위 폴더의 개정을 병합했기 때문입니다. 내 문제는-병합을 수행했지만 루트 폴더가 병합이 발생했음을 인식하지 못했기 때문에 누락 된 개정 번호로 mergeinfo 소품을 수동으로 업데이트해야했습니다. 참고 수정본에 대한 다른 파일 변경 사항이 없기 때문에이 작업 만 수행 할 수 있으며 다른 파일을 병합해야하는 경우 예기치 않은 동작이 발생합니다.이 경우 수정본을 다시 병합해야합니다.
ExecutionOrder

5
TortoiseSVN에서 파일을 마우스 오른쪽 단추로 클릭하고 "TortoiseSVN"-> "속성"을 선택하고 svn : mergeinfo 특성을 삭제하십시오.
StarCub

3
@StephenKennedy 이미 재 통합 된 브랜치 재사용 문제가 발생했을 수 있습니다. "sn에서 트렁크로 다시 통합 병합이 수행되면 더 이상 추가 작업에 분기를 사용할 수 없습니다."로 시작하는 svnbook.red-bean.com/en/1.7/… 의 마지막 섹션을 확인하십시오 .
AlexMA

6
+1. 모든 mergeinfo를 삭제할 필요는 없습니다. 범위가 누락 된 것만. TortoiseSVN 오류 출력을 필터링하여 문제 병합 정보 만 삭제하는 방법 은 내 답변 을 참조하십시오 .
이안 사무엘 맥클린 장로

4
-1. 실제로 수행중인 작업에 대해 확실하지 않은 경우 mergeinfo 속성을 제거해서는 안됩니다. 많은 사람들이 이것을 읽고, 이러한 속성을 삭제하고, 실수로 다른 문제를 일으킬 수 있습니다. Paul Whipp이 더 나은 답변을 제공합니다.
Bizmarck

15

분기를 트렁크에 다시 통합하려고하면 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'.

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


1
다시 통합하기 전에 트렁크에 커밋하려고 할 때 실수로 분기에 커밋했기 때문에 분기에서 트렁크에 대한 일부 변경 사항을 병합 (다시 통합하지 않음)했습니다. 이러한 재 통합 오류의 원인이 될 수 있습니까?
아이언 사무엘 맥린 장로

그것은 내 경우 에이 문제를 일으킨 것 같습니다. 시간을내어 스크립트를 작성해 주셔서 감사합니다!
Sam

@Sam Glad 도움이되었다는 것을 알게되었습니다. 리터럴 스페이스를 a로 바꿔야 \s+작동합니까?
Iain Samuel McLean Elder

일종의; 그것이 +나를 위해 일하는 데 필요한 것이 더 많았습니다. 필자의 경우 일부 줄에는 두 개의 공백이 있고 다른 줄에는 세 개의 공백이 있었으므로 가변 수의 공백에 대한 지원이 필요했습니다. 공간을 왜로 바꿨는지 잘 모르겠습니다 \s. 아마도 필요하지 않았을 것이므로 해당 부분에 대해 죄송합니다!
Sam

@Sam 걱정하지 않아도 TortoiseSVN이 탭이나 다른 것들과 섞일 때까지 리터럴 공간으로 다시 바꿀 것 +입니다.
Iain Samuel McLean Elder

11

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

기이


4
이 답변은 실제로 당신이 한 일을 설명하지 않습니다. 예제가 없으며 매뉴얼의 필수 섹션에 대한 링크조차 없습니다.
zigg

뒤늦게 보면 그렇지 않습니다. 그러나 이것은 질문과 같은 날에 내 자신의 대답이므로 몇 달 동안 가장 좋은 대답이었습니다. 그래도 Tortoise SVN 1.6을 사용하면 의미가 있다고 가정합니다. 대신 그레이의 답변을 수락 된 답변으로 수락했습니다.
colinjwebb

예 : svn merge ^ / tags / wx ^ / tags / yz 1.8을 사용하고 병합 소스가 트렁크에서 이전에 병합 된 특정 수정본이있는 트렁크에 병합 할 때 재 통합 오류가 발생했습니다. 1.8은 재 통합 병합을 시도한 것으로 나타 났지만 그렇지 않았습니다. 1.6의 드라 이런 병합은 잘 작동하지만 두 URL 병합도 적합합니다.
Nick

1
1.8에서 실패한 정확한 시나리오는 패치 릴리스를 위해 일부 개정판에서 태그를 다시 복사하고, 패치 된 태그로 병합하여 트렁크에서 백 포트로 변경 사항을 선택하여 패치 된 태그를 추가로 변경 한 후 병합하는 것입니다. 트렁크에. 기본 태그와 패치 된 버전 사이의 변경 사항은 트렁크로 다시 병합되어야하며 2 개의 URL 병합이이를 처리합니다.
Nick

나는 무슨 일이 일어나고 있는지 이해하려고 3 일을 보내기 전에이 대답을 읽어야했습니다. 나는 왜이 문제가 발생했는지 이해하지 못하지만 @Nick의 의견이 그 이유라고 생각합니다. 이제는 더 이상 보지 않을 것입니다 ...
Dave Richardson

6

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


1
그런 기본 아이디어에 감사드립니다. 모든 답변 중 가장 복잡하지 않았을뿐만 아니라 나를 위해 일한 유일한 답변이었습니다.
redman

3

SVN이 말한대로하십시오.

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

2
나를 위해 작동하지 않았다. 지점에 변경 사항이 이미 존재합니다. 귀하의 지시 사항은 어떤 경우에는 효과가있는 것처럼 보이지만 가정에 근거한 것으로 보이므로 보편적이지 않습니다.
Sam

1

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


0

나는이 문제에 부딪쳤다. 나는 트렁크를 내 지점에 병합했는지 확인하기 위해 지점에서 SVN 로그를 수행했습니다.

모든 수정 사항을 기록했습니다.

그런 다음 개정을 수동으로 지정하여 분기를 트렁크에 병합했습니다. 트렁크를 병합 한 개정을 제외하도록 모든 범위를 지정했습니다. 지점을 병합 할 수 있습니다.

mergeinfo에 대한 되돌림을 수행해야했지만 코드가 병합되었습니다.

지점을 즉시 삭제했습니다.


0

지점의 부분 체크 아웃을 사용한 후이 오류가 발생했습니다. 분기와 트렁크를 최신 상태로 유지했지만 체크 아웃되지 않은 분기 부분의 트렁크 개정은 물론 업데이트되지 않았습니다. 수정은 지점의 전체 체크 아웃을 수행 한 다음 모든 트렁크 변경 사항을 병합하는 것이 었습니다. 이것을 지점에 커밋 한 후 지점을 트렁크에 성공적으로 병합 할 수 있습니다.


0

이 문제가 발생했습니다

  • TortoiseSVN 1.9.7, 빌드 27907-64 비트, 2017/08/08 19:34:38
  • Subversion 1.9.7,-릴리스
  • 4 월 1.5.2
  • 4 월 유틸리티 1.5.4
  • 서프 1.3.9
  • OpenSSL 1.0.2l 2017 년 5 월 25 일
  • zlib 1.2.8
  • SQLite 3.14.1

병합하려는 지점을 마우스 오른쪽 버튼으로 클릭하고 (이 메시지가 표시됨) "버전으로 업데이트"옵션을 선택한 다음 열리는 대화 상자 (아래 스크린 샷)에서 해당 버전을 선택하고 확인을 클릭하십시오. 이전의 모든 버전이 병합되면, 이 메시지를받지 못할 것입니다

여기에 이미지 설명을 입력하십시오

Tortoise SVN을 사용하는 사람을 돕기 위해 여기에 추가


-1

나는 이것이 오래된 게시물이라는 것을 알고 있지만 오류 메시지에 나열된 파일에 SVN 속성 문제가 있음을 알 때 까지이 문제를 해결하기 위해 고심하고 있습니다.

문제가 발생한 파일 인 TortoiseSVN> 속성을 ​​마우스 오른쪽 단추로 클릭 한 후 파일에 두 개의 svn : mergeinfo가 있고 그 중 하나가 데이터에서 상속되지 않은 것으로 나타났습니다. 그래서 나는 그 mergeinfo를 제거했습니다.

TortoiseSVN 1.12.2, 빌드 28653-64 비트를 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.