是否可以在不添加新提交的情况下安全地修复RCS / CVS中严重缩进的C / C ++代码?

时间:2018-03-20 22:41:06

标签: cvs

我有一些CVS格式的旧代码(RCS format)。我想避免检查新版本只修复缩进,而不是语法。原始开发人员通常不再拥有帐户(他们已离开公司)。如果我要修复该缩进,那么该更改将在cvs annotate输出中使用我的用户帐户进行标记,这是不合需要的。由于仅更改了缩进,因此不会更改功能。最终结果是,当文件再次签出时,其缩进被更正,cvs annotate显示最后一行"真实"变化及其相关作者。

所以,甚至可以直接编辑,v RCS文件(例如,在锁定的CVSROOT上的文件副本上),或者是否存在检查此类编辑的校验和({{ 3}}暗示了一个"完整性"字段,但不清楚是否会使这种类型的变更失效)?请注意,这是CVS特定的;其他源代码控制系统(如Git)具有内置机制。 (正在考虑迁移到其他系统,但这是偏离主题的)。

RCS format似乎表明有很多工具可用于解析基础RCS格式(,v文件),因此如果确实存在某种类型的校验和,可能会将其用于此基础在文件中。但如果我可以直接进行编辑,那就更好了。

2 个答案:

答案 0 :(得分:2)

如果可能,我会避免重写原始,v文件。那里有很多事情可能会出错,而且每天都可以帮助减少人数。

我建议“撒谎”给RCS。像这样:

$ co -l file.ext
$ prettyformat file.ext
$ lastauthor=$(rlog file.ext | awk '$1=="date:"{print $5;exit}')
$ ci -u -w"${lastauthor%;}" -m'formatting updates' file.ext

我不知道您的prettyformat命令可能是什么,但您可以将其交换。

这里的基本思想是我们会对每个文件进行更新,但我们会用-w“伪造”作者姓名。这很好,它只是,v文件中的文本字符串,没有与之相关的魔法。

如果您还关注日期,也可以使用-d选项伪造它们:

$ lastmod=$(rlog file.ext | awk '$1=="date:"{print $2,$3;exit}')
$ co -l file.ext
$ prettyformat file.ext
$ lastauthor=$(rlog file.ext | awk '$1=="date:"{print $5;exit}')
$ ci -u -w"${lastauthor%;}" -d"${lastmod%;}" -m'formatting updates' file.ext

这样,如果您将来选择将事物迁移到CVS以外的其他内容,则无论格式更改如何,都将正确记录每个文件的年龄。

答案 1 :(得分:1)

理论上确实可以重写RCS修订文件。但是,在实践中实现起来相当棘手。作为您链接笔记的答案,RCS ,v文件的内容是(是?):

  • 行李箱中的最新版本
  • 使用反向增量来生成每个早期的主干版本
  • 但使​​用正向增量生成每个分支版本

这意味着要在某处替换特定版本,您必须:

  1. 找到它在主干或分支流中的位置。
  2. 如果它在主干中,则在替换此特定主干版本时重写上一个主干增量,这可能意味着重写此增量或重写完整的最终版本;
  3. 否则(它是分支版本),重写后续增量,同时重写此版本的前任增量导致此版本。
  4. 这个过程可能非常容易出错。

    伪造用户名要简单得多。生成文件的更新版本并将其作为您打算获得信用/责任的用户提交。 If you control the system, you control whether some credentials are accepted.如果没有,则无论如何都无法重写,v文件。