Как я могу определить, является ли SVN: MergeInfo поврежден и как я это исправить?
-
04-10-2019 - |
Вопрос
Я подозреваю, что я коррумпировал Mergeinfo, но я не уверен. Кто-нибудь знает, как я бы сделал решимость и какие ресурсы там, чтобы помочь исправить проблемы?
Вот проблема. Моя команда недавно переехала в Agile и использует филиалы функциональных филиалов (настоящие ветви истории), где разные команды работают на одних и тех же источниках одновременно. Как история достигает высокого состояния готовности, которую команда сливается в багажник. Слияния занимают дни или недели из-за отсутствия изменений, неожиданных изменений и конфликтов. Мы говорим о командах из 5-10 человек, и усилия / Churn кажется высоко.
Люди используют этот шаблон слияния a) Pull - слияние ствола к ветви, решить, тестирование, фиксацию б) нажатием - объединение ветви к багажнике, разрешению, тестировании, фиксации в) ветвь воссоздания (или, как правило, создают новую ветку истории и снизить старое, так как это сделано)
К концу этого ветвь и багажник должны быть в выравнивании.
Проблемы, которые мы видим:
- Изменения не сообщаются во время объединения багажника к филиалам в последующей ветке к багажнике
- Конфликты на SVN: Свойства MergeInfo во время слияния
- Файл отсутствует, но локальные редактировать на новый файл, добавленный в ветку и нажатой в багажник
- Входящие + локальные удаления (файл, удаленный на багажнике и филиал, показывает как конфликт)
(1) не должно происходить. Потяните из ветви к багажнику должны поставить два в синхронизации для всех изменений уже на стволе. Изменения в слиянии ветви к багажнику являются изменениями, которые произошли на багажнике. Таким образом, в первом слиянии они должны были распространиться в филиал, но не сделали. Это указывает на коррупцию в данных MergeInfo, которые «скрывают» изменения багажника.
(2) не следует происходить. SVN должно управлять изменениями в отслеживании слияния. Это также указывает на коррупцию в данных MergeInfo
(3) не следует происходить. Это случай нового файла, добавленного на ветку. Он должен отображаться как новый файл, добавленный в багажник. Это также указывает на коррупцию в информационных данных слияния.
(4) Я считаю, что это ошибка SVN и что мы не можем это исправить. Тем не менее, если бы это были наша единственная проблема, я был бы счастлив
В настоящее время мы находимся на сервере SVN 1.5.x с клиентами, использующими SVN 1.6.x и SVN + SSH для подключения. Мы планируем дойти до последних и величайших SVN, так как некоторые исправления могут повлиять на наши проблемы.
Тем не менее, он уверен, что наши данные MergeInfo неверны.
- Сливается, которые не сообщают о всех изменениях
- Конфликты в слиянии свойств MergeInfo
Любые хорошие места для меня, чтобы начать смотреть?
Решение
Я сделал некоторые эксперименты с ветвлением / слиянием SVN, и я обнаружил, что существуют некоторые ситуации, когда объединение просто не работает - например изменения из багажника перезаписываются. Поэтому, если вы продолжаете использовать SVN для функциональных филиалов, вы будете в мире боли.
Я сделал подобные эксперименты с Git, и я не нашел способ получить неверное слияние. Если переезд в Git может быть приемлемым командой / руководством, я настоятельно рекомендую использовать его.
Другие советы
У нас были подобные проблемы из-за подобных обстоятельств и в основном решили их.
Основной это это:
Если вы объединяетесь в вашу ветку из багажника после создания филиала, вам нужно отменить багажник с филиалом Commit (используя SVN Merge - Trecord - только), в противном случае, когда вы пытаетесь реинтегрировать обратно в багажник, он пытается объединить ствол с ветвью обратно в багажник.
Это, очевидно, в конечном итоге возвращает изменения в багажник, сделанном после того, как более поздний багажник -> филиал, как правило, вызывает массивные конфликты (особенно конфликты деревьев, если вы создали новый файл или каталог в багажнике) и т. Д.
Таким образом, наш процесс либо никогда не синхронизирует багажник в ветви после его создания (работает нормально для коротких ветвей) или сделать следующее:
- ветка b из багажника
- совершает багажнику и ветку
- Реинтегрировать багажник в ветвь и совершить (разрешая конфликты, но иначе не изменять, даже для компиляции)
- немедленно сделать SVN Merge - только преобразование багажника до филиала
- исправить любые другие проблемы с филиалом и продолжать развитие
- реинтегрируйтесь от ветви к багажнике, когда закончите.
Я нашел: http://www.collab.net/community/subversion/articles/merge-info.html. полезно, разработав то, что мы делаем не так.