Сообщение об ошибке отсутствия диапазонов при реинтеграции ветви в транк в Subversion 1.5
Я пытаюсь реинтегрировать ветку разработки в ствол в моем хранилище Subversion 1.5. Я слил все изменения из ствола в ветку разработки до этой операции. Теперь, когда я пытаюсь реинтегрировать изменения из ветки, я получаю следующее сообщение об ошибке:
Command: Reintegrate merge https://dev/svn/branches/devel into C:\trunk
Error: Reintegrate can only be used if revisions 280 through 325 were previously
Error: merged from https://dev/svn/trunk to the reintegrate
Error: source, but this is not the case:
Error: branches/devel/images/test
Error: Missing ranges: /trunk/images/test:280-324
...
Затем сообщение продолжает жаловаться на некоторые папки в моем проекте. Но когда я снова пытаюсь объединить изменения из ствола в ветку разработки, TortoiseSVN сообщает мне, что объединять нечего (поскольку я уже объединил все изменения ранее):
Command: Merging revisions 1-HEAD of https://dev/svn/trunk into C:\devel, respecting ancestry
Completed: C:\devel
Я пытаюсь следовать инструкциям здесь: http://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html, но в решении такой проблемы нет ничего.
Есть идеи? Возможно, я должен просто удалить ствол, а затем сделать копию моей ветви? Но я не совсем уверен, безопасно ли это.
Смотрите также
SVN Merge с --reintegrate жалуется на отсутствующие диапазоны, но Mergeinfo кажется правильным
5 ответов
Сначала вы должны объединить ревизии r280-r324 из магистрали в вашу ветку.
Кажется, вы уже слили r325 в свою ветку, однако --reintegrate должен получить все ревизии до последней слитой ревизии. Там не должно быть никакого разрыва. Итак, здесь маленький Diag:
+----------------------> /branches/devel
/ / \<--merge not working!
--------/-------+--+---+-----+---------> trunk
| \ | / |
280 \ V / 325
V
missing sync merges from trunk to branch
Я думаю, что это ваша структура ветки, поэтому вам нужно синхронизировать все изменения от ствола к вашей ветке. Вы только слили r325, так что просто объедините r280-r324, и после этого вам будет хорошо использовать --reintegrate
Мы боролись с этой проблемой в течение нескольких недель, и мы наконец решили ее.
В нашем случае мы работали над веткой, которая ежедневно объединялась со всеми ревизиями магистрали. Когда мы попытались реинтегрировать его (объединить обратно в магистраль), мы получили эту ошибку. Когда мы попытались объединить отсутствующие диапазоны с нашей веткой, мы получили сообщение, что объединять нечего. Это произошло в нескольких несвязанных ветках и с разными файлами и папками.
Решением было добавить недостающие диапазоны в свойство svn: mergeinfo файла или папки в нашей ветке.
Для каждой строки "Отсутствующие диапазоны: путь: revision_range" в сообщении, которое вы получили:
- Отредактируйте свойство svn: mergeinfo в файле / папке, указанной в объединенной ветке
- Добавьте следующее: строка в конце значения свойства (например, /trunk/images/test:280-324)
- Сохранить свойство SVN
Внесите все изменения и реинтегрируйте снова
У меня была эта проблема, и в конечном итоге она была вызвана ошибочными свойствами SVN для папки в моей ветке.
Решение было простым - я слился из магистрали в свою ветку, используя конкретный номер ревизии, который, как сообщалось, отсутствовал, например
И затем, указав, чтобы записать только слияние, например,
Это действие правильно привело мою ветку в соответствие со стволом, и моя последующая реинтеграция ветви в ствол прошла успешно, без сообщения об ошибке отсутствующих диапазонов.
Этот метод позволяет избежать ручного редактирования любых свойств svn:mergeinfo для любых файлов / папок.
Я перестал получать эти проблемы, когда начал использовать опцию -r для команды svn merge и не пытался выполнить --reintegrate до тех пор, пока я не слился без него. Я использую SVN 1.6.1.
Вот что я делаю:
1. при объединении из ветви в транк или из транка в ветвь я использую опцию -r следующим образом:
cd branchWorkArea/topDir
svn merge -r<branchPoint>:HEAD [otheroptions] svn://svn/project/trunk/topDir
когда я разрешаю любые конфликты и тестирую свой код, я фиксирую слияние с веткой, а затем сливаю ветку с стволом, используя те же основные параметры (особенно -rBranchPoint:HEAD)
когда транк проверен и зафиксирован, я использую опцию --reintegrate для закрытия ветки. Убедитесь, что вы также используете опцию -rbranchPoint:HEAD.
Для других вариантов я всегда использую
--depth Infinity (по умолчанию бесконечность в 1.6.2, но не раньше)
-x -b -x -w --ignore-eol-style
Может быть, мне просто повезло, но кажется, что все работает лучше.
Чтобы найти точку ветвления для ветки, вы делаете журнал svn --stop-on-copy, а затем просматриваете самую последнюю версию - это будет копия svn, которая создала ветвь.
Чтобы сделать это на Linux, я делаю что-то вроде этого:
svn log - остановка при копировании svn: // svn / project / trunk / topDir |
grep '^ r' | хвост -1 | sed -e 's/^r//1'-e 's/ .*//g'
это должно напечатать номер ревизии точки ветвления.
Удачи
Это не ответ, а уточняющий вопрос.
Мое сообщение об ошибке:
Reintegrate can only be used if revisions 2669 through 3403 were previously merged from
https://../schemas
to the integrate source, but this is not the case:
trunk/schemas:
Missing ranges:
../schemas:2673,2682,2720,2736,2878,2960,3003,3057
Я объединил ревизии, используя решение, предоставленное @Greg Trevellick, все еще получая сообщение об ошибке.
Когда я открываю свойство svn:mergeinfo после ответа @pako в папке схем, содержимое выглядит следующим образом
/branches/repos_develop_os/trunk_branch-os/schemas:3329
/trunk/schemas:2669-2673,2682,2720,2736,2878,2960,3003,3057
Я не уверен, как я должен изменить этот контент. Похоже, все пропущенные диапазоны есть.
У меня просто была эта проблема, и для меня сработало, во-первых, синхронизировать ветку с магистралью, чтобы ветка могла получать последние обновления из магистрали. После этого я попытался реинтегрировать ветку в ствол и работал нормально.