Subversion не может слиться после перемещения - PullRequest
18 голосов
/ 14 января 2010

Я очень новичок в 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, но этот каталог больше не существует, поэтому он не имеет значения, поэтому откажитесь от него» * ​​1010 * вместо того, что я ожидал, что было «хорошо, он внес изменения в src/com/foo/bar/baz.java, но src/com был перемещен, поэтому мне нужно объединить это в src/main/java/com/foo/bar/baz.java» .

Есть ли способ заставить Subversion осуществлять управление ревизиями, или я собираюсь вручную объединить изменения этого парня в течение следующих двух дней?

Ответы [ 4 ]

13 голосов
/ 15 января 2010

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

Есть ли способ заставить 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 голосов
/ 14 января 2010

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

0 голосов
/ 06 марта 2016

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

0 голосов
/ 16 июня 2011

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

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

...