我有一个20-year-old project我想从RCS迁移到git,而不会丢失历史记录。所有网页都表明One True Path是通过CVS进行的。但经过一个小时的谷歌搜索和尝试不同的脚本,我还没有找到成功将我的RCS项目树转换为CVS的任何内容。我希望Stackoverflow上的好人能够知道实际上有什么用处,而不是声称可以工作但没有。
(我使用原生SO搜索和Google搜索搜索了Stackoverflow,但如果数据库中有一个有用的答案,我就错过了。)
更新:http://git.oblomov.eu/rcs-fast-export上的rcs-fast-export
工具已于2009年4月14日修复,此版本似乎对我有用。此工具将直接转换为git,没有中间CVS。谢谢Giuseppe和Jakub !!!
那些我仍然记得不起作用的事情:
CVS来源的rcs-to-cvs
目录中附带的contrib
脚本
2010年4月13日之前版本中http://git.oblomov.eu/rcs-fast-export的rcs-fast-export
工具
在名为“CVS-RCS-HOW-TO Document for Linux”的文档中找到的rcs2cvs
脚本
答案 0 :(得分:22)
请参阅Git Wiki上的InterfacesFrontendsAndTools页面,“工具”,“与其他版本控制系统的交互”,“其他”。在这里,您可以找到Giuseppe“Oblomov”Bilotta的 rcs-fast-export (gitweb)Ruby脚本的描述和链接。
(网络搜索也会找到Ohloh页面和上述项目的公告)。
答案 1 :(得分:1)
作为一般规则,您应该注意您运行的脚本。对于RCS - > GIT遵循RCS-> CVS-> GIT方法可能符合您的最佳利益。
从2011-01-12开始快速查看rcs-fast-export.rb并查看了这部分代码。这充其量是可怕的。
# 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|
...
答案 2 :(得分:1)
好的,经过一点点的修补,我发现将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_
答案 3 :(得分:0)
我也有这个问题,并与cvs2svn,parsecvs和诸如此类的东西搏斗。
parsecvs离得最近,但基思似乎把它留在后面,现在随机的叉子突然出现了。我遇到的问题是它会解析RCS文件就好了,但它做的最后一件事是git rm
文件,所以我不得不用git reset
来解除删除。< / p>
然后我发现了mercurial的convert
:
https://www.mercurial-scm.org/wiki/ConvertExtension
问题解决了!
我试图从单独的RCS树中逐步添加一些东西,它似乎已经有效了。
答案 4 :(得分:0)
刚发现这个,对我来说很好用:
http://cynic.cc/blog/posts/migrate-from-rcs-to-git/
请注意,该页面上的“cvs-source-dir”必须是绝对路径。