Подтвердить что ты не робот

Перенести проект с RCS на git?

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

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

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


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

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

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

  • rcs2cvs script найден в документе под названием "CVS-RCS-HOW-TO Document for Linux"

4b9b3361

Ответ 1

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

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

Ответ 2

Как правило, вы должны быть осторожны в отношении того, какие сценарии вы запускаете. Для 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 .hgrc file for a username field
            ['~/.hgrc',   /^\s*username\s*=\s*(["'])?(.*)\1$/,       2],
            # the user .(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|
...

Ответ 3

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

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

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

Ответ 4

Только что нашел это, что отлично сработало для меня:

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

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

Ответ 5

Хорошо, после небольшого возиться, я обнаружил, что было тривиально преобразовывать 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_