Reintegrate может использоваться только в том случае, если ревизии X-Y были ранее объединены для реинтеграции источника, но это не так

использовал ветви SVN с Tortoise 1.6. Я периодически сливаю ствол в ветку,чтобы держать его в курсе.

сегодня, я думал, я хотел бы вернуть ветку. Я выбрал "Reintegrate a branch" от Tortoise и получил следующее сообщение об ошибке:

Reintegrate может использоваться только в том случае, если ревизии с 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 является редакцией head. Ревизия 4737 была ревизией, когда я создал ветку.

у меня есть это из журнала для ревизии 4737

действие: добавлен путь:/branches / QST копировать из пути: / trunk

для меня это сообщение об ошибке говорит, что ветвь не была первоначально из ствола, что неверно.

какие идеи?

8 ответов


Если вы работаете над ветвью и поддерживаете ее в актуальном состоянии с другими работами, вы можете быть озадачены, когда создаете рабочую копию магистрали и пытаетесь реинтегрировать свою ветвь, если вы получите сообщение что-то вроде этого:

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

Merge reintegrate test only failed!: "Reintegrate can only be used if some revisions were previously merged from trunk, but this is not the case"

нажмите на текст ошибки и нажмите клавишу CTRL + A, CTRL + C скопировать весь текст.

вставьте текст в строку здесь этого сценария PowerShell:

@"
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) и выполнить команды для удаления проблемы mergeinfos.

вы должны увидеть результат это:

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

а в Грей, теперь вы должны внести изменения в ветку и попытаться снова вернуть. На этот раз это должно сработать!


на самом деле я исправил его, используя опцию "объединить две разные ветви", чтобы объединить ствол и ветвь в мою рабочую копию. Потом я положил его в багажник.

дивное


Что-то, что сработало для меня в tortoise SVN: вместо слияния всех ревизий из ветви выберите конкретный диапазон и вручную выберите все свои ревизии из ветви.


просто делайте, как SVN говорит вам.

  1. объединить ветвь от реверсии, что SVN говорит вам
  2. реинтегрироваться с ветки на стволе

см. Также мой ответ здесь для моего опыта с аналогичным случаем. Я не уверен, что это источник вашей проблемы, но похоже, что Subversion 1.8 имеет проблемы с mergeinfo, когда два изменения отменяют друг друга.


Я столкнулся с этой проблемой. Я сделал журнал SVN на своей ветке, чтобы найти, что я слил ствол с моей веткой.

Я отметил Все изменения.

затем я сделал слияние моей ветви с магистралью, указав ревизии вручную. Я указал все диапазоны, чтобы исключить изменения, которые были объединены магистралью. Мне удается объединить свою ветку.

Мне пришлось сделать несколько возвратов на mergeinfo, но я получил свой код объединен.

Я немедленно удалил свою ветку.