Я намерен переключиться с CVS на Git.
В случае SVN, как представляется, cvs2svn
. Есть ли аналогичный инструмент для легкой миграции из CVS в Git?
Есть ли инструмент переноса из CVS в Git?
Ответ 1
Единственный инструмент, который имеет инкрементный импорт, выглядит как git-cvsimport. Если вы хотите преобразовать (migrate) из CVS в Git, лучшее решение на данный момент, как представляется, указано выше cvs2git mode cvs2svn.
Ответ 2
cvs2git
В дополнение к предоставленным ответам, здесь приводится руководство по преобразованию cvs в git с помощью инструмента cvs2git. Здесь modulename - это имя каталога CVS, который вы хотите импортировать.
Предпосылки
cvs2svn
пакет (который включает команду cvs2git) должен быть уже установлен.
Обновление: шаги 1 и 2 не совсем корректны - перед тем, как попытаться, прочитайте комментарий ниже mhagger, сопровождающий cvs2git
-
checkout modulename
cvs -d URL co -P modulename
-
создать пустой CVSROOT, необходимый cvs2git
mkdir modulename/CVSROOT
-
загрузите пример cvs2git.options в http://cvs2svn.tigris.org/svn/cvs2svn/trunk/cvs2git-example.options (пользователь "гость" без пароля)
-
отредактируйте файл 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]>',
-
запустить cvs2git для создания git temp файлов
cvs2git --options=cvs2git.options --fallback-encoding utf-8
-
создать git репозиторий
mkdir gitrepo && cd gitrepo && git init .
-
импорт из git файлов temp, созданных cvs2git
cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import
-
проверка рабочей копии
git reset --hard
Ответ 3
cvs2svn имеет cvs2git.
Ответ 4
Если у кого-то еще есть несчастье использовать CVS, вы можете попробовать "crap": https://github.com/rcls/crap Он быстрый (поскольку доступ к CVS может быть быстрым), поддерживает беспорядок, который вы находите в cvs-репозиториях, и инкрементный.
Ответ 5
Альтернативой может быть использование git cvsimport *
Ответ 6
Я не пробовал это сам, но друзья сообщили о хорошем успехе, преобразовании сначала из CVS в SVN, а затем из SVN в Git. Похоже, что инструменты для этих соответствующих переходов были более тщательно измучены, чем прямой переход CVS к Git.
Ответ 7
Вы можете добавить fromcvs в список. Он хорошо преобразуется и работает очень быстро, а также инкрементально. Однако он не содержит липких тегов, а только ветки.
Ответ 8
Я пробовал cvs2git, git -cvsimport и parsecvs.
cvs2git иногда (насколько я помню) создает фиктивные ветки для тегов.
git -cvsimport не поддерживает несколько тегов для набора изменений. Однако можно взять некоторые дополнительные изменения для cvsps для его поддержки и изменить исходный git -cvsimport на то, что использует обновленный cvsps (я пробовал это и, похоже, работает). С точки зрения преимуществ он поддерживает инкрементные обновления и имеет некоторую логику для правильного импорта слияний (но он ТРЕБУЕТ подходящего формата для сообщения фиксации).
parsecvs до сих пор дал мне лучшие результаты. К сожалению, код, доступный в Интернете, не скомпилирован с последним git. Изменение не является тривиальным.
EDIT: похоже, ESR взял на себя как cvsps и parsecvs, поэтому есть надежда на перенос CVS → GIT. НО он уже упоминал в каком-то списке рассылки, что он может объявить некоторые из инструментов, которые он принял недавно официально умершим.
Ответ 9
Вы можете использовать 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
.
Ответ 10
Я прочитал ответ Вануа и комментарии к нему. К сожалению, 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
нужен доступ ко всей истории. Простой контроль недостаточно.
Ответ 11
Я нашел cvs-fast-export, проделал отличную работу. Мне пришлось загрузить и скомпилировать его самостоятельно, но у меня не было никаких существенных проблем.