Самый надежный способ преобразовать репозиторий CVS, содержащий проекты Eclipse, в git? - PullRequest
9 голосов
/ 23 июля 2010

У меня есть ситуация, когда у меня есть устаревший CVS-репозиторий, который мы хотели бы преобразовать в git раз и навсегда, сохраняя полную историю и т. Д.

Все папки в корне репозитория содержат проекты Eclipse (или простые или динамические веб-проекты), включая .classpath и .project.Мы используем Team ProjectSets для проверки проектов, которые нам нужны для данной задачи (где набор проектов находится в проекте, содержащем основной, а остальные - библиотечные проекты).

Когда извлечен Team ProjectSetрабочее пространство полностью заполнено.

Этот подход работал довольно хорошо в течение многих лет (за исключением части набора проектов, поставляемой с 3.5), и мы хотели бы работать аналогичным образом с git, если это возможно, номы не уверены, как.

Я немного поигрался с git cvs import, но он потерпел неудачу - возможно, из-за того, что мы не использовали модули.

Как бы вы предложили нам это сделать, и как мы должны работать с git, чтобы разрешитьнаше текущее использование проектов общей библиотеки?Будем ли мы ЕСТЬ , чтобы представить maven и создать модули maven для наших библиотечных проектов?Или просто плющ муравья?


РЕДАКТИРОВАТЬ: Теперь мне удалось преобразовать наш CVS-репозиторий в Subversion с помощью подходящего вызова cvs2svn и обнаружил, что Eclipse хорошо распознает полученный репозиторий Subversion.К сожалению, после клонирования http://github.com/iteman/svn2git` и попытки запустить bin / svn2git я получаю

tra@Sandbox:~/cvsgit/svn2git/svn2git$ bin/svn2git
bin/svn2git:35:in `initialize': wrong number of arguments (2 for 1) (ArgumentError)
        from bin/svn2git:35:in `new'
        from bin/svn2git:35

Это с Ubuntu 10.04.1 LTS Server, и я пробовал разные вещи sudo с Ruby и его гемами безполностью понимая, что я сделал, так как я не программист на Ruby, поэтому, возможно, я все испортил.Я был бы признателен за совет - если проще всего установить другой вариант Linux для преобразования, это нормально.


РЕДАКТИРОВАТЬ:

https://help.ubuntu.com/community/Git http://css.dzone.com/articles/subversion-git-morning


Редактировать: Моя первая попытка с svn2git по умолчанию успешно завершена (через некоторое время), и я получаю хороший репозиторий, где git branch -a сообщает примерно

tra@Sandbox:~/gitroot/svnroot$ git branch -a
* master
  remotes/XX64_DEPLOYED_CODE
  remotes/Beta1
  remotes/Beta2
  remotes/SV46
  ... lots more

Мы заинтересованычтобы иметь возможность проверить ветку SV46 и работать с ней (нас в основном не волнуют теги, а только фактические ветви).Я настроил gitosis, перенес этот репозиторий в gitosis и клонировал его на другой компьютер, чтобы узнать, как выполнить бит «работа с SV46» с Eclipse. ТО хранилище не знает всех ветвей:

tra@TRA ~/git/git00 (master)
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

Нужно ли мне массировать исходный результат из svn2git, чтобы получить информацию в хранилище Gitosis?Нужно ли клонировать с аргументом?Должен ли я повторить шаг svn2git с предложенной версией, а не с поставкой с Ubuntu?

РЕДАКТИРОВАТЬ: Оказалось, что публикация сгенерированного svn2git репозитория с "git push --mirror" сделала вещи, показанные в gitosisрепозиторий.Теперь я вижу следующий внутренний житоз (обрезанный):

tra@Sandbox:/srv/gitosis/repositories/git01.git$ git branch -a
* master
  remotes/XX64_DEPLOYED_CODE
  remotes/Basic_Beta1
  remotes/Beta1
  remotes/Beta2
  remotes/SV46
  ... lots more
tra@Sandbox:/srv/gitosis/repositories/git01.git$ git branch
* master
tra@Sandbox:/srv/gitosis/repositories/git01.git$ git tag -l
tra@Sandbox:/srv/gitosis/repositories/git01.git$

Попытка клонировать этот репозиторий с git clone gitosis@sandbox:git01 -b remotes/SV46 или git clone gitosis@sandbox:git01 -b SV46, оба говорят мне, что удаленная ветвь не найдена в восходящем источнике, используя вместо этого HEAD.

Я лаю не на том дереве?

1 Ответ

6 голосов
/ 24 июля 2010

Прежде всего, использование подмодулей для независимых частей вашего центрального хранилища VCS (т. Е. Вашего репозитория CVS) всегда хорошо (см. « Каковы пределы Git? »).
Это означает, что вызакончится множеством независимых репозиториев Git, то есть «набор файлов, эволюционирующих независимо друг от друга», поэтому существуют подмодули.

Поэтому требуется многократный импорт Git (в нескольких репо).

Но поскольку git cvs import не всегда соответствует задаче, я бы порекомендовал:

  • cvs2svn, чтобы сначала получить SVN-репо (всего одно репо)
  • svn2git для правильного преобразования вашего репозитория SVN в git (т.е. преобразование веток SVN в ветку Git и тегов SVN в теги Git)
...