SVN Объединить ветку из одного репо в ствол другого - PullRequest
5 голосов
/ 24 февраля 2009

У меня есть два репозитория, которые живут на отдельных серверах, назовите их repo-1 и repo-2.

Для начала оба «ствола» были равны:

repo-1 / trunk == repo-2 / trunk

Между тем изменения были внесены в repo-1 / trunk, и я работал над ними и передавал изменения в repo-2 / trunk.

Теперь мне нужно объединить изменения из repo-1 / trunk в repo-2 / trunk.

Я подумал, что скопирую repo-1 / trunk в repo-2 / tags / r1_20090224, а затем объединю этот тег с моей локальной рабочей копией repo-2 / trunk (т.е. c: \ dev \ repo2-trunk).

Есть предложения, как это сделать? Я пытаюсь использовать TortoiseSVN и выполняя «Объединение двух разных деревьев», я использовал следующие настройки:

От: репо-2 / транк Кому: repo-2 / tags / r1_20090224 Рабочая копия: c: \ dev \ repo2-trunk

Я также пытался поменять местами «от» и «на» ... но не повезло. Используя любой из этих двух вариантов слияния, я получаю следующий результат:

  1. Если я сливаюсь из транка в тег (в свою локальную копию repo-2 / trunk), я теряю изменения в транке и получаю изменения тега.

  2. Если я сливаюсь из тега в транк (в свою локальную копию repo-2 / trunk), я теряю изменения тега и сохраняю изменения транка.

Есть предложения, как это сделать?

Ответы [ 4 ]

1 голос
/ 24 февраля 2009

Если svn merge провалит вас через два сайта / сервера:

svn: Unusable URI: it does not refer to this repository

Тогда используйте следующий подход:

  1. идентифицирует уровень редакции, с которого repo-2 начал отклоняться от repo-1, скажем, 123 , затем:
  2. svn co http://server1/repo-1/trunk
  3. svn diff -r123:HEAD http://server2/repo-2/trunk >repo2.patches
  4. patch -p0 -i repo2.patches
  5. экран для любых конфликтов и их разрешения
  6. svn ci --message "merged from repo-2"
1 голос
/ 24 февраля 2009

Это не совсем понятно, но вам нужно объединить из base двух деревьев, то есть точки, в которой два ствола были одинаковыми.

Сандер опередил меня, так что поверьте ему, но вот еще пара советов:

  1. Как можно скорее объедините эти два хранилища в одно; Subversion не была предназначена для такой работы. Или, в качестве альтернативы, перейдите на DVCS, например, git, bazaar или ...
  2. Если вы придерживаетесь Subversion, обычно такие вещи выполняются с ответвлениями , а не с тегами . Тэги обычно используются в качестве маркеров и не фиксируются.
1 голос
/ 24 февраля 2009

Сначала выясните ревизию, где деревья были одинаковыми. Затем объедините его из этой ревизии в HEAD репозитория repo-1 с вашей рабочей копией repo-2.

Использование клиента командной строки похоже на это, если вы хотите объединить изменения между r123 и r456

svn merge http://domain.tld/repos1@123 http://domain.tld/repos1@456 repos2-workingcopy
0 голосов
/ 24 февраля 2009

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

...