SVN изменяет свойство svn: mergeinfo для файлов без изменений

У меня "проблема" с svn. Я не могу понять, почему иногда, когда я объединяю две ветки, в отчетах изменяется свойство mergeinfo для файлов без изменений текста.
Это нормально поведение?
Если нет, в чем может быть проблема?


person rascio    schedule 11.09.2012    source источник


Ответы (2)


Ну, вы действительно объединили эти две ветки. Правильно? Работает как положено.

Вы сделали слияние. Несмотря на то, что слияние не привело к каким-либо изменениям кода, и это не редкость для слияний, Subversion по-прежнему отмечает, что слияние было выполнено. По крайней мере, отметка о том, что вы выполнили слияние, даже если оно не привело к изменениям, по-прежнему является хорошей идеей. Представьте, что выпуск выходит, и кто-то говорит «Подождите, никто не объединил эту ветку обратно в ствол! Нам придется отложить выпуск, пока мы не сделаем это», потому что они не видели слить в запись svn:merge-info.

Итак, да, то, что вы видели, может быть нормальным поведением.

Теперь, если ваш вопрос: «Почему мои изменения не были объединены», это уже другая проблема. Subversion обычно хорошо справляется со слияниями, но вы должны сделать несколько вещей:

  • Выполняйте слияние только из корня вашего проекта, а не из отдельных веток и файлов. Бывают исключения, но в большинстве случаев вам следует объединять ветви проекта. В противном случае вы получите svn:merge-info повсюду.
  • Know when to use the --reintegrate flag. You have a branch "A" (which could include trunk in this example). You make a branch "B" from branch "A".
    • When you merge from "A" to "B", you don't use --reintegrate
    • Когда вы объединяете «B» в «A», не забудьте использовать --reintegrate. Это меняет способ обработки слияния Subversion.
  • Subversion не очень хорошо справляется с очень сложными ситуациями слияния. Если вы сделаете ветку целым рядом ветвей и будете выполнять слияние между ними, Subversion испортится. Это одна из причин, по которой я говорю людям не заниматься бизнесом ветвь по каждой функции. Это затрудняет отслеживание различных слияний и может вызвать проблемы слияния в Subversion. Возможно, это особенность: поскольку Subversion не очень хорошо справляется с этими очень сложными ситуациями слияния, вам следует их избегать. Мне удалось отговорить многих менеджеров от очень сложных схем ветвления, направленных против шаблонов, просто заявив, что Subversion не справится с этим.
  • Если вы вручную объединяете свои файлы (а многие разработчики предпочитают это делать: применять изменения в ветке обратно к магистрали вручную), используйте svn merge --record-only, чтобы Subversion знала, что вы выполнили слияние. Веселье возникает, когда разработчики выполняют некоторые слияния вручную, в то время как другие позволяют Subversion выполнить слияние.

Итак, если Subversion не слилась с необходимыми изменениями, убедитесь, что вы правильно используете --reintegrate и что у вас нет других проблем, упомянутых выше.

person David W.    schedule 11.09.2012
comment
Да, но, например, если в моей ревизии N я изменяю файл Controller.java в ветке B1, а затем реинтегрирую его в ствол, почему перед фиксацией у меня есть свойство mergeinfo изменилось в корне trunk и в файле configuration.xml (например) ?? Для меня это звучит странно ... - person rascio; 11.09.2012
comment
Вы просто объединяете этот один файл или объединяете все из корня, и это единственный файл, который объединяется? Если вы выполняете слияние из корня проекта, и это единственный слитый файл. Корень проекта получает svn:mergeinfo. configuration.xml изменяется, потому что кто-то сделал svn merge только этот файл, и теперь он должен также отслеживать слияния. Таким образом, он svn:mergeinfo тоже обновляется. Вот почему я сказал всегда выполнять слияние из корня проекта. В противном случае у вас останутся тысячи файлов - каждый со своим svn:mergeinfo. - person David W.; 11.09.2012
comment
Хорошо, но никто не трогал configuration.xml, вот в чем проблема, также, если в нем нет никаких изменений, SVN устанавливает свойство mergeinfo ... - person rascio; 12.09.2012
comment
Если этот файл имеет атрибут svn:mergeinfo, это означает, что кто-то выполнил слияние этого файла, и только этот файл в далеком прошлом. svn:mergeinfo устанавливается в корне слияния (вот почему я сформулировал свою первую точку зрения). Как только svn:mergeinfo установлен для файла или каталога, он будет обновляться при каждом слиянии, даже если он не находится в корне дерева. См. Наследование Mergeinfo. Вы можете удалить свойство svn:mergeinfo на configuration.xml, чтобы прекратить отслеживание слияния. Тогда он не будет его обновлять. - person David W.; 12.09.2012
comment
Нашел отсутствующий документ. Это объяснит все об отслеживании слияний в Subversion и почему этот configuration.xml файл имеет свойство svn:mergeinfo. - person David W.; 12.09.2012

Свойство svn:mergeinfo используется для отслеживания информации о слияниях, которые были выполнены в вашем репозитории.

Подробнее см. В SVNBook: " Mergeinfo и превью ».

person bahrep    schedule 11.09.2012
comment
Да, я читал его, но почему он отслеживает информацию о файлах, на которые не влияет слияние? - person rascio; 11.09.2012