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, но похоже, что он делает свое дело. Если кто-то использует его, я буду признателен, если отправите мне его обзор.

Другие вопросы по тегам