Перенести проект с 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"
Ответы
Ответ 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_