Как определить, если svn:mergeinfo поврежден и как я могу это исправить?
Я подозреваю, что у меня испорченная информация mergeinfo, но я не уверен. Кто-нибудь знает, как я могу принять решение и какие ресурсы существуют, чтобы помочь решить проблемы?
Вот проблема. Моя команда недавно перешла на гибкую и использует ветки функций (на самом деле ветки истории), где разные команды работают одновременно над одними и теми же источниками. По мере того как история достигает высокой степени готовности, команда объединяется в магистраль. Слияния занимают дни или недели из-за отсутствующих изменений, неожиданных изменений и конфликтов. Мы говорим о командах из 5-10 человек, и усилие / отток кажется слишком высоким.
Люди используют этот шаблон слияния a) PULL - объединить ствол-ветвь, разрешить, проверить, зафиксировать b) PUSH - объединить ветвь-ствол, разрешить, протестировать, зафиксировать c) Восстановить ветвь (или обычно создать новую ветвь истории и отбрось старое, так как все готово)
К концу этого ветвь и ствол должны быть выровнены.
Проблемы, которые мы видим:
- Изменения, о которых не сообщалось во время слияния между ветвями, отображаются в последующих ветвях
- конфликты в свойствах svn: mergeinfo во время слияния
- файл отсутствует, но локальное редактирование нового файла добавлено в ветку и перенесено в транк
- входящее + локальное удаление (удаленный файл на соединительной линии и ветви отображается как конфликт)
(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 полезным, когда решал, что мы делаем неправильно.