У меня есть "проблема" с svn. Я не понимаю, почему иногда, когда я объединяю две ветки, он сообщает об изменении свойства mergeinfo в файлах без изменений в тексте.
Это нормальное поведение?
Если нет, что может быть проблемой?
SVN изменяет свойство svn: mergeinfo на файлы без изменений
Ответ 1
Хорошо, вы объединили эти две ветки. Правильно? Работает как ожидалось.
То, что вы сделали, это слияние. Несмотря на то, что слияние не привело к каким-либо изменениям кода и что не редкость слияния, Subversion по-прежнему отмечает, что слияние было выполнено. Если ничего другого, отметив, что вы сделали слияние - хотя это и не привело к изменениям, все еще хорошая идея. Представьте, что вышел релиз, и кто-то сказал: "Подождите, никто не объединил эту ветку обратно в багажник! Мы должны будем отложить выпуск до тех пор, пока не получим это", потому что они не видели слияния в записи svn:merge-info
.
Итак, да, что вы видели, может быть нормальное поведение.
Теперь, если ваш вопрос: "Почему мои изменения не слились", это другая проблема. Subversion обычно делает хорошую работу слияниями, но вы должны убедиться, что делаете несколько вещей:
- Объединяться только с корнем вашего проекта, а не с отдельными ветвями и файлами. Есть исключения, но большую часть времени вы должны объединять ветки проекта. В противном случае вы получите
svn:merge-info
повсюду. - Знайте, когда использовать флаг
--reintegrate
. У вас есть ветвь "A" (которая может включать в себя соединительную линию в этом примере). Вы делаете ветку "B" из ветки "A".- Когда вы сливаетесь с "A" на "B" , вы не используете
--reintegrate
- Когда вы сливаетесь с "B" на "A", не забудьте использовать
--reintegrate
. Это изменяет способ обработки Subversion слиянием.
- Когда вы сливаетесь с "A" на "B" , вы не используете
- Subversion не очень хорошо справляется с очень сложными ситуациями слияния. Если вы делаете ветку целым множеством ветвей и сливаетесь между ними, Subversion будет испорчена. Это одна из причин, по которой я говорю людям, чтобы они не занимались отраслевым бизнесом. Это позволяет отслеживать различные слияния, которые трудно сделать, и может привести к тому, что Subversion будет иметь проблемы слияния. Возможно, это особенность: поскольку Subversion не справляется с этими очень сложными ситуациями слияния, вы должны их избегать. Я смог поговорить с многими менеджерами из очень сложных схем разветвления с помощью шаблонов, просто заявив, что Subversion не справляется с этим.
- Если вы вручную объедините свои файлы (и многие разработчики предпочитают это делать: примените изменения в ветке обратно к соединительной линии вручную), используйте
svn merge --record-only
, чтобы Subversion знал, что вы сделали слияние. Hilarity возникает, когда разработчики делают некоторые слияния вручную, а другие позволяют Subversion выполнять слияние.
Итак, если Subversion не сливается с изменениями, они должны иметься, убедитесь, что вы правильно используете --reintegrate
, и что у вас нет других проблем, упомянутых выше.
Ответ 2
Свойство svn:mergeinfo
используется для отслеживания информации о слияниях, которые были выполнены в вашем репозитории.
Подробнее см. SVNBook: "Mergeinfo и Previews" .