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