Реинтеграцию можно использовать только в том случае, если ревизии с X по Y были ранее объединены из <URL> для повторной интеграции источника, но это не так.


127

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

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

Реинтеграцию можно использовать только в том случае, если реинтеграция с 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

Действие: Добавлен путь: / branch / qst Копировать из пути: / trunk

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

Любые идеи?


1
Ладно. Я больше не использую Subversion, но поверю вам на слово!
colinjwebb

1
Спасибо приятель. Думаю, для этого страница лучше.
Gray

Ответы:


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, но они заставили меня нервничать как «хакеры». Чтобы решить эту проблему, я решил сделать именно то, на что намекает подрывная деятельность в сообщении. Я вернулся в свою ветку и явно объединил указанные ревизии:

$ 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
Ницца! «делайте именно то, на что намекает подрывная деятельность». :)
Adam

7
Я согласен, более популярный ответ заманчив, но, наверное, лучше исправить его правильно. Пришлось перейти к конкретному проблемному файлу и svn mergeон из ствола.
Steve Kehlet

1
Это отлично сработало для меня. Основная хитрость заключалась в том, что Черепаха не сообщала мне версию проблемы. После обновления моего svn-клиента командной строки я смог заставить его выдать мне такое же сообщение, как и вы, а затем смог объединить проблемную ревизию и вернуться в основной канал.
user12861

7
У меня это не сработало, потому что перечисленные «недостающие» слияния уже были выполнены в ветке (исходный код реинтеграции).
Сэм

6
Хотя этот ответ звучит разумно, для меня он не сработал. Я продолжал получать одни и те же сообщения об ошибках. Что помогло, так это удаление свойств svn: mergeinfo из перечисленных файлов, как и предполагает принятый ответ.
Дженни О'Рейли

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 Возможно, вы столкнулись с проблемой повторного использования ветки, которая уже была реинтегрирована. В таком случае просмотрите последний раздел svnbook.red-bean.com/en/1.7/…, начинающийся со слов «После слияния --reintegrate от ветки к основной ветке ветку больше нельзя будет использовать для дальнейшей работы».
AlexMA

6
+1. Вам не нужно удалять все mergeinfos; только те, у которых отсутствуют диапазоны. См. Мой ответ, чтобы узнать, как удалить только проблему mergeinfos, отфильтровав вывод ошибок TortoiseSVN.
Иэн Сэмюэл Маклин, старейшина,

4
-1. Вам не следует удалять свойства mergeinfo, если вы действительно не уверены в том, что делаете. Многие люди могут прочитать это, удалить эти свойства и непреднамеренно создать другие проблемы. У Пола Уиппа есть лучший ответ.
Bizmarck

15

Если вы попытаетесь повторно интегрировать свою ветку в ствол и увидите такие ошибки в TortoiseSVN:

Не удалось выполнить тест слияния и реинтеграции !: «Реинтеграцию можно использовать только в том случае, если некоторые ревизии были ранее слиты из магистрали, но это не так»

Щелкните текст ошибки и нажмите 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'.

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


1
Задолго до реинтеграции я слил (не реинтегрировал) некоторые изменения в ствол из моей ветки, потому что я случайно зафиксировал свою ветку, когда собирался зафиксировать в стволе. Может ли это быть причиной этих ошибок реинтеграции?
Иэн Сэмюэл Маклин, старейшина,

Это именно то, что, кажется, вызвало эту проблему в моем случае. Спасибо, что нашли время написать сценарий!
Сэм

@Sam Рад, что вы нашли это полезным. Вам нужно было заменить буквальный пробел \s+на, чтобы он работал на вас?
Iain Samuel McLean Elder

Вроде, как бы, что-то вроде; это было больше то, +что нужно, чтобы он работал на меня. В моем случае в некоторых строках было два пробела, а в других - три, поэтому требовалась поддержка переменного количества пробелов. Я не уверен, почему я изменил пробел на \s; это, вероятно, не было необходимо, так что извините за эту часть!
Сэм

@Sam Не беспокойтесь, но пока я заменю его на буквальное пространство, пока TortoiseSVN не начнет смешивать его с вкладками или чем-то еще :-) Я оставил это, +так как это было полезно для вас.
Iain Samuel McLean Elder

11

На самом деле я исправил это, используя параметр «объединить две разные ветки», чтобы объединить ствол и ветвь в мою рабочую копию. Затем я зафиксировал это в багажнике.

дивный


4
Этот ответ на самом деле не объясняет, что вы сделали. Ни примеров, ни даже ссылки на нужный раздел инструкции.
zigg 05

Оглядываясь назад, нет. Однако, поскольку это был мой собственный ответ в тот же день, что и вопрос, это был лучший ответ за несколько месяцев. Я бы хотел предположить, что это имеет смысл, если вы все еще используете Tortoise SVN 1.6. Вместо этого я принял ответ Грея как принятый ответ.
colinjwebb

Пример: svn merge ^ / tags / wx ^ / tags / yz. Ошибка реинтеграции возникла у меня при использовании 1.8 и слиянии в ствол, где в источнике слияния была определенная ревизия, ранее слитая с ним из ствола. 1.8, похоже, решил, что предпринимается попытка реинтеграции, но это не так. Пробное слияние с 1.6 подойдет, но слияние двух URL тоже подходит.
Ник

1
Точный сценарий, который не удался с 1.8, - это копирование тега из некоторых ревизий обратно для выпуска патча, вишня выбирает изменение из магистрали в резервный порт путем слияния с исправленным тегом, вносит дальнейшее изменение в исправленный тег и объединяет его обратно в багажник. Изменения между базовым тегом и исправленной версией - это то, что нужно объединить обратно в магистраль, и слияние двух URL-адресов работает для этого.
Ник

Я должен был прочитать этот ответ, прежде чем потратить 3 дня, пытаясь понять, что происходит. Я до сих пор не понимаю, почему у меня возникла эта проблема, но подозреваю, что причиной является комментарий от @Nick - и теперь все работает, я не собираюсь больше смотреть ...
Дэйв Ричардсон

6

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


1
Спасибо за такую ​​базовую идею. Из всех ответов это был не только наименее сложный, но и единственный, который сработал для меня.
redman

3

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

  1. Объедините ветку из Reversion, которую вам сообщает SVN
  2. Реинтегрировать из ветки в магистраль

2
У меня не получилось. Изменения уже были в ветке. Ваши инструкции выглядят так, как будто они должны работать в некоторых случаях, но они, похоже, основаны на предположении, поэтому не кажутся универсальными.
Сэм,

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, -выпуск
  • апр 1.5.2
  • апр-утили 1.5.4
  • крепостной 1.3.9
  • OpenSSL 1.0.2l 25 мая 2017 г.
  • zlib 1.2.8
  • SQLite 3.14.1

щелкните правой кнопкой мыши ветку, в которой вы хотите объединить (но получив это сообщение), и выберите опцию «обновить до ревизии», а затем в открывшемся диалоговом окне (снимок экрана ниже) выберите эти ревизии и нажмите «ОК» - как только все предыдущие ревизии будут объединены, ты бы не получил это сообщение

введите описание изображения здесь

Добавление этого здесь, чтобы помочь тем, кто использует Tortoise SVN


-1

Я знаю, что это старый пост, но я изо всех сил пытался решить эту проблему, пока не обнаружил, что файлы, перечисленные в сообщении об ошибке, имеют проблему со свойством SVN.

Я щелкнул правой кнопкой мыши проблемные файлы: TortoiseSVN> Свойства и обнаружил, что в файле есть два svn: mergeinfo, и один из них не унаследован от данных. Поэтому я удалил файл mergeinfo.

Я использую TortoiseSVN 1.12.2, сборка 28653 - 64 бит.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.