Как определить, если svn:mergeinfo поврежден и как я могу это исправить?

Я подозреваю, что у меня испорченная информация mergeinfo, но я не уверен. Кто-нибудь знает, как я могу принять решение и какие ресурсы существуют, чтобы помочь решить проблемы?

Вот проблема. Моя команда недавно перешла на гибкую и использует ветки функций (на самом деле ветки истории), где разные команды работают одновременно над одними и теми же источниками. По мере того как история достигает высокой степени готовности, команда объединяется в магистраль. Слияния занимают дни или недели из-за отсутствующих изменений, неожиданных изменений и конфликтов. Мы говорим о командах из 5-10 человек, и усилие / отток кажется слишком высоким.

Люди используют этот шаблон слияния a) PULL - объединить ствол-ветвь, разрешить, проверить, зафиксировать b) PUSH - объединить ветвь-ствол, разрешить, протестировать, зафиксировать c) Восстановить ветвь (или обычно создать новую ветвь истории и отбрось старое, так как все готово)

К концу этого ветвь и ствол должны быть выровнены.

Проблемы, которые мы видим:

  1. Изменения, о которых не сообщалось во время слияния между ветвями, отображаются в последующих ветвях
  2. конфликты в свойствах svn: mergeinfo во время слияния
  3. файл отсутствует, но локальное редактирование нового файла добавлено в ветку и перенесено в транк
  4. входящее + локальное удаление (удаленный файл на соединительной линии и ветви отображается как конфликт)

(1) Не должно происходить. Тяга от ветви к стволу должна синхронизировать все изменения, уже внесенные в ствол. Изменения в слиянии между ветвями и ветвями - это изменения, произошедшие в стволе. Таким образом, в первом слиянии они должны были распространиться на ветку, но не сделали этого. Это указывает на повреждение в данных mergeinfo, которое "скрыло бы" изменения в магистрали.

(2) не должно происходить. SVN должен управлять изменениями в отслеживании слияний. Это также указывает на повреждение в данных mergeinfo

(3) не должно происходить. Это случай добавления нового файла в ветку. Он должен отображаться как новый файл, добавленный в транк. Это также указывает на повреждение данных слияния.

(4) Я считаю, что это ошибка SVN, и мы не можем это исправить. Тем не менее, если бы это была наша единственная проблема, я был бы счастлив

В настоящее время мы находимся на сервере svn 1.5.x с клиентами, использующими svn 1.6.x и svn+ssh для подключения. Мы планируем перейти на последнюю и лучшую версию SVN, поскольку некоторые исправления могут повлиять на наши проблемы.

Тем не менее, похоже, что наши данные mergeinfo неверны.

  • Слияния, которые не сообщают обо всех изменениях
  • Конфликты при слиянии свойств mergeinfo

Какие-нибудь хорошие места для меня, чтобы начать искать?

2 ответа

Решение

Я провел несколько экспериментов с ветвлением / слиянием SVN и обнаружил, что есть ситуации, когда слияние просто не работает - например, изменения из транка перезаписываются. Так что, если вы продолжите использовать SVN для функциональных ветвей, вы будете в мире боли.

Я провел аналогичные эксперименты с git и не нашел способа получить неправильное слияние. Если команда / руководство может принять переход на git, я настоятельно рекомендую его использовать.

У нас были похожие проблемы из-за схожих обстоятельств, и мы в основном решили их.

Основным является это:

Если вы объединяетесь в свою ветку из транка после создания ветки, вам нужно пометить транк с фиксацией ветки (используя svn merge --record-only), в противном случае при попытке реинтеграции обратно в транк он попытается объединить коммит ствол на ветку обратно в ствол.

Это, очевидно, в конечном итоге отменяет изменения в стволе, сделанные после более поздней фиксации trunk->branch, имеет тенденцию вызывать массовые конфликты (особенно конфликты деревьев, если вы создали новый файл или каталог в trunk) и т. Д.

Таким образом, наш процесс заключается в том, чтобы либо никогда не синхронизировать транк в ветке после его создания (работает нормально для короткоживущих ветвей), либо сделать следующее:

  • ветка б от ствола
  • совершает ствол и филиал
  • реинтегрировать транк в ветвь и фиксировать (разрешать конфликты, но без изменений, даже для компиляции)
  • немедленно выполнить svn-слияние --record-only ревизии фиксации магистрали к ветви
  • устраните любые другие проблемы с веткой и продолжайте разработку
  • реинтегрировать из ветви в ствол, когда закончите.

Я нашел: http://www.collab.net/community/subversion/articles/merge-info.html полезным, когда решал, что мы делаем неправильно.

Другие вопросы по тегам