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