Существует ли инструмент миграции с 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
проверка по модулю
cvs -d URL co -P modulename
создать пустой CVSROOT, необходимый для cvs2git
mkdir modulename/CVSROOT
загрузите пример cvs2git.options по адресу http://cvs2svn.tigris.org/svn/cvs2svn/trunk/cvs2git-example.options (пользователь "guest" без пароля)
отредактируйте файл 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>',
запустите cvs2git для создания временных файлов git
cvs2git --options=cvs2git.options --fallback-encoding utf-8
создать репозиторий git
mkdir gitrepo && cd gitrepo && git init .
импорт из временных файлов git, созданных cvs2git
cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import
оформить рабочую копию
git reset --hard
Если у кого-то все еще есть неудача в использовании CVS, вы можете попробовать "дерьмо": https://github.com/rcls/crap Это быстро (насколько быстрый доступ к CVS может быть), поддерживает беспорядок, который вы найдете в репозиториях cvs и постепенно.
Я не пробовал это сам, но друзья сообщили об успешном преобразовании сначала из 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 отлично поработал. Я должен был загрузить и скомпилировать его сам, но у меня не было никаких серьезных проблем.