Существует ли инструмент миграции с CVS на Git? - PullRequest
63 голосов
/ 19 мая 2009

Я собираюсь перейти с CVS на Git. В случае SVN, кажется, cvs2svn. Существует ли аналогичный инструмент для простой миграции с CVS на Git?

Ответы [ 11 ]

32 голосов
/ 20 мая 2009

Единственный инструмент, который имеет добавочный импорт, кажется git-cvsimport . Если вы хотите конвертировать ( migrate ) из CVS в Git, лучшее решение на данный момент, по-видимому, упомянуто выше cvs2git mode of cvs2svn .

См. Также Интерфейсы и инструменты интерфейсов * Страница 1012 * на вики-сайте Git, раздел о взаимодействии с другими системами контроля версий.

17 голосов
/ 16 июня 2013

cvs2git

В дополнение к предоставленным ответам, есть руководство о том, как конвертировать cvs в git с помощью инструмента cvs2git. Здесь modulename - это имя каталога CVS, который вы хотите импортировать.

Предпосылки

Пакет

cvs2svn (который включает команду cvs2git) должен быть уже установлен.

Обновление: шаги 1 и 2 не полностью верны - перед попыткой прочтите комментарий ниже от mhagger, разработчика cvs2git

  1. заказ по модулю

    cvs -d URL co -P modulename
    
  2. создать пустой CVSROOT, необходимый для cvs2git

    mkdir modulename/CVSROOT
    
  3. загрузить пример cvs2git.options по адресу http://cvs2svn.tigris.org/svn/cvs2svn/trunk/cvs2git-example.options (пользователь "гость" без пароля)

  4. редактировать файл cvs2git.options. Замените r'test-data / main-cvsrepos 'на' modulename '. Редактирование авторов трансформ.

    # edit this
    run_options.set_project(  r'modulename',
    
    # and this
    author_transforms={
        'jrandom' : ('J. Random', 'jrandom@example.com'),
        'mhagger' : 'Michael Haggerty <mhagger@alum.mit.edu>',
    
  5. запустить cvs2git для создания временных файлов git

    cvs2git  --options=cvs2git.options --fallback-encoding utf-8
    
  6. создать репозиторий git

    mkdir gitrepo && cd gitrepo && git init .
    
  7. импорт из временных файлов git, созданных cvs2git

    cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import
    
  8. оформить рабочую копию

    git reset --hard
    
13 голосов
/ 19 мая 2009

cvs2svn имеет режим cvs2git .

8 голосов
/ 21 июля 2013

Если у кого-то еще есть проблемы с использованием CVS, вы можете попробовать «дерьмо»: https://github.com/rcls/crap Он быстрый (поскольку доступ к CVS может быть быстрым), поддерживает беспорядок, который вы найдете в репозиториях cvs, и добавочный.

7 голосов
/ 19 мая 2009

Альтернативой может быть использование git cvsimport *

5 голосов
/ 19 мая 2009

Я сам не пробовал этого, но друзья сообщили об успешном преобразовании сначала из CVS в SVN, а затем из SVN в Git. Похоже, что инструменты для выполнения этих соответствующих переходов были потрясены более тщательно, чем прямой переход с CVS на Git.

2 голосов
/ 09 сентября 2012

Я пробовал cvs2git, git-cvsimport и parsecvs.

cvs2git иногда (насколько я помню) создает фиктивные ветви для тегов.

git-cvsimport не поддерживает несколько тегов для набора изменений. Однако возможно получить некоторые дополнительные изменения для поддержки cvsps и изменить исходный git-cvsimport на что-то, использующее обновленный cvsps (я пробовал это, и похоже, что оно работает). С другой стороны, он поддерживает инкрементные обновления и имеет некоторую логику для правильного импорта слияний (но ТРЕБУЕТ соответствующего формата для сообщения фиксации).

parsecvs пока дал мне лучшие результаты. К сожалению, код, доступный в сети, не компилируется чисто с последним git. Изменение, хотя и не тривиальное, выполнимо.

РЕДАКТИРОВАТЬ: похоже, ESR принял оба cvsps и parsecvs , поэтому есть некоторая надежда на миграцию CVS-> GIT. НО он уже упомянул в каком-то списке рассылки, что он может объявить некоторые из инструментов, которые он приобрел недавно официально мертвыми.

1 голос
/ 12 сентября 2015

Я прочитал ответ Вануана и комментарии Мхаггера к нему. К сожалению, mhagger не написал, как это сделать с cvs2git. Здесь все очень хорошо написано: http://www.mcs.anl.gov/~jacob/cvs2svn/cvs2git.html

Я использовал cvs2git вместо git-cvsimport, потому что документация git-cvsimport предлагает использовать его вместо того, чтобы избежать проблем git-cvsimport: https://www.kernel.org/pub/software/scm/git/docs/git-cvsimport.html#issues

Из этого следует, что я работал над созданием репозитория git из CVS-репозитория sourceforge в Debian Sid:

$ apt-get install cvs2svn cvs
$ mkdir project.cvs
$ rsync -av rsync://${PROJECT}.cvs.sourceforge.net/cvsroot/${PROJECT}/ project.cvs
$ cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git project.cvs
$ mkdir project.git
$ cd project.git
$ git init
$ cat ../git-blob.dat ../git-dump.dat | git fast-import

Шаг rsync необходим, потому что cvs2git нужен доступ ко всей истории. Простого оформления заказа недостаточно.

1 голос
/ 19 марта 2015

Вы можете использовать git cvsimport. Для установки требуется cvsps, но вам необходимо установить 2.x, так как 3.x больше не является несовместимым .

Затем импортируйте CVS-репозиторий в пустой git. Пример использования:

git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:anonymous@reponame.cvs.sourceforge.net:/cvsroot/path ModuleName

В OSX вы устанавливаете cvsps-2.1 следующим образом (имея brew):

brew tap homebrew/versions
brew install cvsps2
brew link  cvsps2

Вы также можете использовать cvs2git инструмент, который может конвертировать CVS-репозиторий в git. Однако вам необходимо иметь доступ к каталогу CVSROOT.

Проверьте документацию cvs2git для шагов установки.

Пример использования:

cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo

Это создаст два выходных файла в формате git fast-import. Имена этих файлов указываются в вашем файле параметров или аргументах командной строки. В этом примере эти файлы имеют имена cvs2git-tmp/git-blob.dat и cvs2git-tmp/git-dump.dat.

.

Эти файлы можно импортировать в пустой репозиторий git:

cat git-blob.dat git-dump.dat | git fast-import

Затем удалите ветку TAG.FIXUP и запустите gitk --all, чтобы просмотреть результаты преобразования.

Проверьте больше, запустив: cvs2git --help.

1 голос
/ 25 мая 2009

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

...