Subversion не может слиться после перемещения
Вопрос
Я очень новичок в Subversion, но уже много лет использую другие системы контроля версий, такие как ClearCase.
Мой босс попросил меня исправить этот проект, чтобы его можно было создать с помощью Maven вместо Ant.Одна из важных вещей, которые я должен был сделать, - это переехать src/com
Для src/main/java/com
, и двигаться test/com
Для src/test/java/com
, что я и сделал , используя svn mv
команда.Я по глупости предположил, что, поскольку я использовал команды Subversion для перемещения каталогов, эта Subversion тогда узнает, что что-то было перемещено.И когда я объединил свою ветвь с магистралью, оказалось, что это сработало.Но теперь кто-то другой только что закончил работу над веткой, которую он отколол до моей работы.Итак, мы собираемся объединить его материалы в trunk, и в основном Subversion, похоже, думает “хорошо, он внес изменения в src/com/foo/bar/baz.java
, но этот каталог больше не существует, так что он не имеет значения, поэтому выбросьте его ” вместо того, что я ожидал, что было “хорошо, он внес изменения в src/com/foo/bar/baz.java
, но src/com
был перемещен, поэтому мне нужно объединить это в src/main/java/com/foo/bar/baz.java
”.
Есть ли способ заставить Subversion выполнять управление редакциями, или я собираюсь вручную объединять изменения этого парня в течение следующих двух дней?
Решение
Чтобы прямо ответить на ваш вопрос:
Есть ли способ заставить Subversion выполнять управление редакциями, или я собираюсь вручную объединять изменения этого парня в течение следующих двух дней?
Вы должны быть в состоянии сделать это немного проще для себя.
Одна вещь, которую вы можете сделать, чтобы облегчить часть боли (предполагая, что схема выглядит следующим образом)
/branch/foo/src/com
/branch/foo/test/com
/trunk/src/main/java/com
/trunk/src/test/java/com
Прежде чем вы переместили src/com в src/main/java/com и test/com в src/test/ java / com, вы могли бы сделать:
cd $TRUNK
svn merge -r N:M http://server/branch/foo .
Что вы могли бы сделать сейчас, это:
cd $TRUNK
svn merge -r N:M http://server/branch/foo/src/com src/main/java/com
svn merge -r N:M http://server/branch/foo/test/com src/test/java/com
Надеюсь, это поможет вам сэкономить немного времени.
Другие советы
Это звучит как одноразовая проблема.Я полагаю, вы могли бы использовать svn diff > /to/some/file.patch
(или обычный diff), чтобы сохранить его изменения в файл, затем примените его к вашей перемещенной магистрали с patch -p0 < /to/some/file.path
.
Кто-нибудь пробовал это программное обеспечение? xМерге
Это плагин к SmartSVN, но, похоже, он делает свое дело.Если кто-то им пользуется, я буду благодарен, если пришлют мне отзыв о нем.
У меня просто была такая же проблема, и я решил ее с помощью мерзавец.Я не хотел объединять серверные модули с svn merge -r N:M http://server/branch/foo/test/com src/test/java/com
для src/main
, src/test
и resources
.
Поэтому я использовал git svn clone file:///some/repo -T trunk -b branches -t tags
.Вот так я смог сохранить мерзавец мастер синхронно с магистраль svn и объединить его с моим ветвь git.Когда я закончил, я объединил ветвь git Для мерзавец мастер и оттуда к магистраль svn.