2010-10-21 2 views
1

Проблема, которую я пытаюсь решить, не отличается от Subversion out of sync with production code, easiest way to update subversion, но несколько отличается.Повторный импорт из CVS в Subversion

я преобразовал проект (Java) с CVS на SVN (с использованием cvs2svn, сохраняя полную историю) - скажем, в версии 1.00

развития на версии 2.00 продолжали с кодом в SVN.

Между тем, некоторые исправления были сделаны в CVS (как установка DEV инструмент отличается.)

Теперь, что мне нужно сделать, это эффективно реимпорта часть проекта из CVS.

Если бы я был

cvs:project/module1 (version 1.00) 
      /module2 (version 1.10) 

и

svn:project/trunk/module1 (version 2.xx) 
       /module2 (Version 1.00) 

Есть ли способ просто повторно импорта module2 из CVS и сохранить полную историю?

Я снова запустил cvs2svn в репозитории CVS и собирался загрузить его в SVN в качестве другого проекта, а затем сделать необоснованное слияние - но я не уверен, что это такая прекрасная идея.

Я буду поддерживать версию 1.xx в SVN в будущем.

ответ

0

Вы можете преобразовать текущее CVS-репо в новое дублирующее SVN-репо. Используя это, вы можете использовать вишневые ревизии для сбрасывания и повторного воспроизведения этих отвалов назад к реальному репо SVN. (Я понятия не имею, как это будет иметь дело с тем случаем, когда тот же файл был изменен как в реальном SVN, так и в CVS/манекене SVN. Возможно, вам захочется не узнать об этом, переименовав выбранные вишневыми дампами конкретные ветвь.)

Однако могут быть более эффективные способы, и это может не работать вообще. Я только когда-либо преобразовал одно CVS-репо в репо SVN, и это было проблемой «боль в одном». Поэтому возьмите это с большим количеством соли и высушите его сначала на копии.

+0

Это звучит как большая боль, и я обеспокоен тем, как отслеживаются импортируемые свалки. – exception

+0

@exception: Что значит «отслеживаемый»? – sbi

+0

Сохранение истории. В настоящее время я пытаюсь рассмотреть возможность слияния определенных списков изменений с V1.x, которые были сделаны ПОСЛЕ первоначальной миграции на SVN, или я мог бы просто скопировать весь модуль. – exception

0

Так как я буду поддерживать версию 1.xx в SVN, и я знаю, в какой момент код расходится, я должен иметь возможность объединять списки изменений, созданные после перехода на SVN. Похоже, что это будет держать все в порядке.

Я экспериментирую с этим в данный момент.

+0

Это оказалось слишком большим количеством конфликтов, если я не был очень осторожен, чтобы выбрать диапазон списков изменений. – exception

0

Из номеров версий, которые вы цитируете, похоже, что все постконверсионные коммиты на модуле 1 находились в Subversion, и все последующие преобразования на модуле2 были в CVS. Если это так, вы можете попробовать следующее:

Повторно преобразовать весь проект CVS, используя те же параметры cvs2svn, что и раньше. Если вам повезет, r0: rN (где N - некоторое число) результирующего репозитория Subversion согласуется с перекрывающейся частью репозитория Subversion, полученной в результате первого преобразования. В этом случае вы должны иметь возможность «svnadmin dump -incremental -rN: HEAD» из нового репозитория Subversion и «загрузить svnadmin» поверх старого хранилища Subversion. Коммиты в объединенном хранилище не будут находиться в хронологическом порядке, но это незначительная досада (и может быть исправлена ​​с использованием некоторых других инструментов за счет перенумерации записей Subversion).

(Не обязательно, чтобы перекрывающиеся части репозиториев Subversion были идентичны: cvs2svn использует некоторые эвристики для вывода наборов изменений, и их вычеты могут отличаться из-за других изменений. Но до тех пор, пока существуют идентифицируемые «1.00», ревизии в каждом хранилище с одинаковым содержимым, то я думаю, что эта процедура должна работать.)

Сделайте резервные копии, прежде чем попробовать это!

Смежные вопросы