Почему фиксация ветви на нетронутом стволе вызывает конфликты? - PullRequest
3 голосов
/ 04 апреля 2011

С трудом справлялся с моим первым большим слиянием каталогов и надеялся понять, почему я получаю эти ошибки.

Я разветвил код в trunk / неделю назад и внес много измененийк коду в ветках / myBranch, и решил, что пришло время объединить их в транк /.С тех пор ни один код не был затронут в стволе, он точно такой же, как когда разветвлялся новый код, поэтому я подумал, что это означает, что не может возникнуть никаких конфликтов.

Ложное предположение, кажется, насколько я знаю, получаюкуча конфликтов при попытке слить новый код в транк и сообщения об отсутствующих файлах.Может кто-нибудь уточнить, почему это происходит?

Это основные факты:

  • Код был разветвлен в редакции 19466.
  • С тех пор ствол не тронут.Без изменений (Last Changed Rev: 19453).
  • Ветвь была (к сожалению?) Сделана локально, включая некоторые изменения.
  • Я попытался объединить изменения из ствола вступления ветви, используя следующую команду: svn merge -r19466:HEAD branches/myBranch trunk/.(Не имело значения, стою ли я в транке и пропускаю последний аргумент или просто делаю вышеописанное)
  • Subversion жалуется на отсутствующий файл, fooDao.! C trunk/fooDao.java

    > local missing, incoming edit upon merge

    Этот файл был переименован в том же коммите, в котором была создана ветвь (19466), но я подумал, что Subversion должен подхватить его, поскольку он был выпущен с использованием svn move.Журнал показывает его происхождение:

    ... A /branches/myBranch/fooDao.java (из /branches/myBranch/fooDato.java:19452)

  • Если вам интереснопочему номера ревизий увеличиваются даже без изменений кода, это потому, что это общий репозиторий, содержащий много других (активных проектов).

1 Ответ

3 голосов
/ 05 апреля 2011

Основная причина ошибок, с которыми я столкнулся, была связана с неправильным созданием ветки. Если вы выполните ветвление правильно , точка метки будет иметь те же файлы, что и в стволе (в этой ревизии). Если ветку, созданную в ревизии 100, нужно объединить с транком, я мог бы просто использовать svn merge -r100:HEAD ../branches/myBranch ./trunk и получить только изменения в файлах в этих ревизиях.

К сожалению, у меня были локальные модификации в trunk / перед созданием ветки. Эти изменения были скопированы в новую ветку и затем зафиксированы. Таким образом, файлы в myBranch и trunk были разными на момент создания ветки. Чтобы исправить ситуацию, я должен был найти ревизию перед созданием ветви, чтобы слить (скажем, rev99) и выполнить слияние оттуда. Любые возникшие конфликты были просто решены путем выбора «tf» (их полное), чтобы получить полный файл из ветви в конфликте. Я мог сделать это быстрое исправление, потому что багажник был нетронут и не имел изменений.

Подводя итог: чтобы избежать проблем, правильно делайте ветвления, убедившись, что

...