it-roy-ru.com

Миграция с CVS на Git без потери истории

Мне нужно знать, есть ли способ перенести мой код из системы контроля версий CVS в Git?

Если да, то как насчет моей истории коммитов?

33
Ahmed Alaa

Я лично не делал конвертацию из CVS в Git, но я считаю, что инструмент Эрика Рэймонда cvs-fast-export - это инструмент для использования. У него есть справочная страница здесь . cvsps - еще один инструмент, поддерживаемый Эриком, но недавно он был признан устаревшим в пользу cvs-fast-export. cvs2git это еще один инструмент, который построен на том же оборудовании, что и cvs2svn. Последний был чрезвычайно искусным, и поэтому я очень надеюсь, что cvs2git одинаково хорош.

Стоит отметить: CVS - это довольно сломанная RCS. Вполне возможно, что он может иметь контент, который не может быть точно отражен в Git. IOW, там есть некоторое несоответствие импеданса, но инструменты очень стараются сохранить как можно больше. Обязательно проверьте вашу конверсию и убедитесь, что вы довольны результатами. Возможно, вам придется исправить часть истории Git, чтобы получить что-то более приемлемое, но я сомневаюсь, что вам нужно.

16
John Szakmeister

Вот процесс, который я использовал для переноса репозитория SourceForge CVS в Git с использованием cvs2git ( последняя стабильная версия здесь , но IIRC я ​​использовал версию github dev), которая работает как в Windows, так и в Linux без каких-либо требуется компиляция, так как это всего лишь Python:

Как импортировать CVS из sourceforge в git.
Во-первых, вам нужно скачать/оформить репозиторий cvs со всей историей (не только извлекать HEAD/Trunk):

rsync -av rsync://PROJECT.cvs.sourceforge.net/cvsroot/PROJECT/\* cvs  

затем используйте cvs2git (скрипт Python, работает на всех платформах, компиляция не требуется):

python cvs2git --blobfile="blob.dat" --dumpfile="dump.dat" --username="username_to_access_repo" --options=cvs2git.options --fallback-encoding utf-8 cvs  

это должно было сгенерировать два файла blob и dump, содержащие всю вашу историю cvs. Вы можете открыть их в текстовом редакторе, чтобы проверить правильность содержимого.

затем инициализируйте ваш git-репо в другой папке:

mkdir gitexport/
cd gitexport
git init  

затем загрузите экспортированную историю cvs в git:

cat ../cvs/{blob,dump}.dat | git fast-import  

и затем поместите курсор git commit в конец истории:

git reset --hard  

наконец и опционально, вы можете нажать на ваш удаленный git-репозиторий:

git Push -u Origin master  

конечно, вам нужно, прежде чем git Remote добавить Origin https: // your_repo_url

Примечание: cvs2git.options - это файл конфигурации в формате JSON для cvs2git, где вы можете указать преобразования для различных вещей, например, имен авторов (так что их псевдонимы будут автоматически преобразованы в их полное имя после импорта). Смотрите документацию здесь или включенный файл опций примера .

Кроме того, вам не нужно владеть репо с помощью этого метода, вы можете перенести проекты SourceForge, которые вам не принадлежат (вам просто нужно иметь право оформить заказ, так что это работает в любом публичном репо).

21
gaborous

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

В зависимости от вашей операционной системы, вам может потребоваться установить поддержку для этого отдельно. Например, на машине с Ubuntu вам понадобится пакет git-cvs.

Этот ответ входит в более подробно.

10
Chris

Недавно я использовал (2016) reposurgeon Эрика Раймонда для импорта репозитория CVS из sourceforge в git. Я был очень приятно удивлен, и это сработало очень хорошо .. После прошлого опыта с cvs2svn и другими инструментами, я без колебаний рекомендую повторную хирургию для такого рода задач.

Эрик опубликовал простое руководство по миграции здесь

3
crististm

Чтобы клонировать проект из sourceforge в github, я выполнил следующие шаги.

PROJECT=some_sourceforge_project_name
GITUSER=rubo77
rsync -av rsync://a.cvs.sourceforge.net/cvsroot/$PROJECT/\* cvs
svn export --username=guest http://cvs2svn.tigris.org/svn/cvs2svn/trunk cvs2svn-trunk
cp ./cvs2svn-trunk/cvs2git-example.options ./cvs2git.options
vim cvs2git.options # edit run_options.set_project
cvs2svn-trunk/cvs2git --options=cvs2git.options --fallback-encoding utf-8

создать пустой мерзавец в https://github.com/$GITUSER/$PROJECT.git

git clone [email protected]:$GITUSER/$PROJECT.git $PROJECT-github
cd $PROJECT-github
cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import
git log
git reset --hard
git Push
0
rubo77