cvs2svn и информация о слиянии - PullRequest
1 голос
/ 11 марта 2009

Я хочу преобразовать проект CVS в Subversion, используя cvs2svn. Он имеет основной ствол (HEAD) с несколькими временными ветвями разработки, созданными из ствола.

Прежде чем мы преобразуем его, мы объединим последние изменения из ствола во все ветви разработки. Но они также будут иметь изменения, которые еще не были объединены в магистраль.

Когда я преобразую проект в SVN, он не будет иметь никаких свойств истории слияния. Итак, как я могу инициализировать эти свойства, чтобы впоследствии я мог объединяться с ветвями и из них?

Другими словами, после преобразования будет ряд различий между стволом и любой данной ветвью. В следующий раз, когда я сливаюсь из магистрали в ветку, я не хочу рассматривать эти различия как изменения, которые необходимо объединить. Но когда я сливаюсь с ветки в ствол, я делаю. Это возможно?

ОБНОВЛЕНИЕ : Я принял предложение Мхаггера и сказал SVN, что в ветви уже внесены все изменения из магистрали:

svn co [branch URL] .
svn merge --record-only [trunk URL]
svn commit -m ''

Это работает, поэтому в следующий раз, когда я попытаюсь слиться из магистрали в ветку, новых изменений не будет.

Но у меня все еще есть проблема с --reintegrate merges, от ответвления до ствола. В конечном итоге он отображает множество файлов с буквой «R», что означает, что в стволе есть файл X, а в ветви - файл X, но они не считаются одним и тем же файлом. Это делает слияние беспорядочным, хотя, похоже, в итоге получается правильный результат.

Я думаю, что это происходит из-за следующей последовательности событий:

  • Ветка создана (в CVS)
  • Файл X был добавлен в транк (в CVS)
  • X был объединен с веткой (также в CVS)
  • Проект был преобразован в Subversion
  • Subversion не знала, что ветка / X была скопирована из транка / X. Так что думает, что это замена.

История SVN выглядит примерно так:

r100: create branch (copied from trunk)
r200: add trunk/X
r300: add branch/X (because of a CVS merge, but it's not a SVN copy)

Итак, есть ли способ сказать мне, что Subversion игнорирует файлы? происхождение при выполнении слияния --reintegrate? Или лучший способ конвертировать эти файлы?

Ответы [ 2 ]

1 голос
/ 11 марта 2009

Как вы, вероятно, знаете, cvs2svn не генерирует метаданные слияния, за исключением неявной информации о том, откуда произошли ветви. (Это невозможно, поскольку CVS не записывает такую ​​информацию.) Таким образом, после преобразования вам придется явно сообщить Subversion о слияниях, которые были выполнены в CVS.

Самый простой способ сделать это - использовать "svn merge --record-only ...", как описано в книге Subversion .

0 голосов
/ 10 июля 2009

ОК, я думаю, что у меня есть обходной путь для проблемы --reintegrate выше, на случай, если кому-то будет интересно.

Согласно этому документу , если я слил последнюю версию транка в ветвь, выполнение --reintegrate по существу аналогично выполнению этого с транком:

svn merge [trunk URL] [branch URL]

Но этот синтаксис допускает --ignore-ancestry, а --reintegrate - нет. Так что я могу сделать:

svn merge --ignore-ancestry [trunk URL] [branch URL]

Это показывает те же результаты, что и --reintegrate, без всех файлов с "R". Единственное другое отличие - это свойства mergeinfo. Я не уверен, что они будут правильными, поэтому, вероятно, лучше потом удалить ветку, как вы это сделаете после --reintegrate.

...