it-swarm.com.ru

Существует ли инструмент миграции с CVS на Git?

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

63
freddiefujiwara

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

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

32
Jakub Narębski

cvs2git

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

Предпосылки

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

Update: шаги 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 (пользователь "guest" без пароля)

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

    # edit this
    run_options.set_project(  r'modulename',
    
    # and this
    author_transforms={
        'jrandom' : ('J. Random', '[email protected]'),
        'mhagger' : 'Michael Haggerty <[email protected]>',
    
  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
    
17
Vanuan

у cvs2svn есть режим cvs2git .

13
bdonlan

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

8
user2603340

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

7
ralphtheninja

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

5
Dave W. Smith

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

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

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

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

Правка: Похоже, что ESR принял оба cvsps и parsecvs поэтому есть некоторая надежда для миграции CVS-> GIT. НО он уже упомянул в каком-то списке рассылки, что он может объявить некоторые из инструментов, которые он приобрел недавно, официально мертвыми.

2
Tomek

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

2
robinr

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

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

git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:[email protected]:/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
kenorb

Я прочитал ответ Вануана и комментарии Мхаггера к нему. К сожалению, 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 #проблемы

Из этого следует, что я работал над созданием 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
josch

Я нашел cvs-fast-export проделал отличную работу. Я должен был загрузить и скомпилировать его сам, но у меня не было никаких серьезных проблем.

0
Edward Falk