Подтвердить что ты не робот

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 управление ревизией, или я собираюсь вручную сменить это изменение парней в течение следующих двух дней?

4b9b3361

Ответ 1

Чтобы ответить на ваш вопрос напрямую:

Есть ли способ сделать 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

Надеюсь, это поможет вам сэкономить некоторое время.

Ответ 2

Это звучит как одноразовая проблема. Я предлагаю вам использовать svn diff > /to/some/file.patch (или обычный diff), чтобы сохранить его изменения в файле, а затем применить его на перемещенном сундуке с помощью patch -p0 < /to/some/file.path.

Ответ 3

Кто-нибудь пробовал это программное обеспечение? xMerge

Это плагин для SmartSVN, но похоже, что это трюк. Если кто-то его использует, я буду благодарен, если вы отправите мне его обзор.

Ответ 4

У меня была такая же проблема, и я решил ее с помощью 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 в синхронизации с svn trunk и объединить его с моей ветвью git. Когда я закончил, я объединил ветвь git с git мастером и оттуда в svn trunk.