Subversion не может слиться после перемещения
Я очень новичок в Subversion, но годами использую другие системы контроля версий, такие как ClearCase.
Мой начальник попросил меня исправить этот проект, чтобы он мог быть построен с помощью Maven вместо Ant. Одна из важных вещей, которые я должен был сделать, это двигаться src/com
в src/main/java/com
и двигаться test/com
в src/test/java/com
, который я сделал с помощью svn mv
команда. Я глупо предположил, что, поскольку я использовал команды Subversion для перемещения каталогов, Subversion будет знать, что все было перемещено. И когда я слил свою ветку в ствол, оказалось, что она работает. Но теперь кто-то еще только что закончил работу над веткой, которую он разветвлял до моей работы. Итак, мы идем, чтобы объединить его вещи в багажник, и в основном Subversion, кажется, думает: "Хорошо, он внес изменения в src/com/foo/bar/baz.java
, но этот каталог больше не существует, поэтому он не имеет значения, поэтому откажитесь от него " вместо того, что я ожидал, что было " хорошо, он внес изменения в src/com/foo/bar/baz.java
, но src/com
был перемещен, поэтому мне нужно объединить это в src/main/java/com/foo/bar/baz.java
"
Есть ли способ заставить Subversion осуществлять управление ревизиями, или я собираюсь вручную объединить изменения этого парня в течение следующих двух дней?
4 ответа
Чтобы ответить на ваш вопрос напрямую:
Есть ли способ заставить 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
,
У меня была такая же проблема, и я решил ее с помощью git. Я не хотел объединять несколько модулей с 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
, Таким образом я смог синхронизировать git master с svn trunk и объединить его с моей веткой git. Когда я закончил, я слил ветку git с git master и оттуда в svn trunk.
Кто-нибудь пробовал это программное обеспечение? xMerge
Это плагин для SmartSVN, но похоже, что он делает свое дело. Если кто-то использует его, я буду признателен, если отправите мне его обзор.