Мигрировать проект из RCS в git?

У меня есть 20-летний проект, который я хотел бы перенести из RCS в git, не теряя истории. Все веб-страницы предполагают, что One True Path проходит через CVS. Но после часа поиска в Google и пробного использования различных сценариев мне еще не удалось найти ничего, что успешно преобразовало бы мое дерево проектов RCS в CVS. Я надеюсь, что хорошие люди в Stackru будут знать, что на самом деле работает, в отличие от того, что, как утверждают, работает и нет.

(Я искал Stackru, используя как собственный поиск SO, так и поиск Google, но если в базе данных есть полезный ответ, я пропустил его.)

ОБНОВЛЕНИЕ: rcs-fast-export инструмент на http://git.oblomov.eu/rcs-fast-export был отремонтирован 14 апреля 2009 года, и эта версия, кажется, работает для меня. Этот инструмент конвертирует прямо в git без промежуточного CVS. Спасибо Джузеппе и Якубу!!!


Вещи, которые не сработали, что я до сих пор помню:

  • rcs-to-cvs сценарий, который поставляется в contrib каталог источников CVS

  • rcs-fast-export инструмент на http://git.oblomov.eu/rcs-fast-export в версиях до 13 апреля 2010 г.

  • rcs2cvs скрипт найден в документе под названием "CVS-RCS- HOW-TO документ для Linux"

6 ответов

Решение

См. Страницу http://git.or.cz/gitwiki/InterfacesFrontendsAndTools в Git Wiki, в "Инструменты", "Взаимодействие с другими системами контроля версий", "Другое". Там вы найдете описание и ссылку на скрипт Ruby rcs-fast-export ( gitweb) Джузеппе "Обломов" Билотта.

(Веб-поиск также найдет страницу Ohloh и объявление для упомянутого проекта).

Хорошо, после небольшой переделки я обнаружил, что конвертировать RCS в CVS было тривиально. Файлы имеют одинаковый формат, поэтому нужно просто переместить файлы в существующий корень CVS. Это предполагает, что у вас есть доступ к файлам RCS.

# Create CVS root dir. You only need to do this once.
mkdir $HOME/cvs/
cd $HOME/cvs/
cvs init

# Import a repository from RCS to CVS
cp -a _projectname_/RCS $HOME/cvs/_projectname_

Как правило, вы должны быть осторожны с тем, какие скрипты вы запускаете. Для RCS -> GIT в ваших интересах следовать методологии RCS->CVS->GIT.

Быстро взглянул на rcs-fast-export.rb по состоянию на 2011-01-12 и наткнулся на эту часть кода. В лучшем случае это страшно.

# steal username/email data from other init files that may contain the
# information
def steal_username
    [
            # the user's .hgrc file for a username field
            ['~/.hgrc',   /^\s*username\s*=\s*(["'])?(.*)\1$/,       2],
            # the user's .(g)vimrc for a changelog_username setting
            ['~/.vimrc',  /changelog_username\s*=\s*(["'])?(.*)\1$/, 2],
            ['~/.gvimrc', /changelog_username\s*=\s*(["'])?(.*)\1$/, 2],
            []
    ].each do |fn, rx, idx|
...

Здесь я уточняю ответ Эдварда Фалька, тривиально конвертируя RCS в CVS, а затем конвертируя CVS в Git. В этом примере используется git-cvsimport для преобразования из CVS в Git, но любой другой метод преобразования CVS в Git должен работать.

      mkdir $HOME/mydir/  # Any directory name will do.
cd $HOME/mydir/
cvs -d $HOME/mydir/ init

# Trivially import an RCS project into CVS.
cp -a /path/to/_projectname_/RCS $HOME/mydir/_projectname_

# Convert the CVS project to Git.
git cvsimport -d $HOME/mydir/ -C mynewgitrepository _projectname_

Просто нашел это, который работал хорошо для меня:

http://cynic.cc/blog/posts/migrate-from-rcs-to-git/

Просто обратите внимание, что "cvs-source-dir" на этой странице должен быть абсолютным путем.

Я тоже имел эту проблему и боролся с cvs2svn, parsecvs и еще много чего. parsecvs получил самый близкий, но Кит, кажется, оставил это позади, и теперь появляются случайные вилки. Проблема, с которой я столкнулся, заключалась в том, что она могла бы нормально разбирать файлы RCS, но последнее, что он сделал, было git rm файл, так что мне пришлось бы обойти с git reset отменить удаление.

Тогда я обнаружил ртутный convert: https://www.mercurial-scm.org/wiki/ConvertExtension Проблема решена!

Я попытался постепенно добавить некоторые вещи из отдельных деревьев RCS, похоже, это сработало.

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