Мигрировать проект из 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
каталог источников CVSrcs-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, похоже, это сработало.