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

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

11 ответов

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

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

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 (пользователь "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', '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
    

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

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

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

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

Я сопровождаю cvs-fast-export. Раньше я поддерживал cvsps и parse2cvs и внимательно изучил cvs-fastimport и cvs2git.

Преобразование CVS в git - сложная и неприятная проблема с ребрами арматуры. Все существующие инструменты конвертации имеют известные ограничения, некоторые довольно серьезные.

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

Не доверяйте cvs-fastimport, он довольно глючит и часто портит соединения веток.

Для получения дополнительной информации см. http://www.catb.org/esr/cvs-fast-export/.

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

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

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

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

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

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

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

Ты можешь использовать 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,

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

Другие вопросы по тегам