当我想发帖的时候终于找到了我的问题的答案!不过,我仍然会发布它,包括我的答案,以防它对其他人有帮助:

当从 CVS 转换为 Subversion cvs2svn 时,某些文件失败并显示以下消息

"xxx is not a valid ,v file"

有什么问题?

有帮助吗?

解决方案

事实证明CVSNT忽略从那里cvs2svn需要他们的一些文件最后是0xA。这可以很容易地固定具有下面的C#代码:

static void Main(string[] args)
{
  foreach (string file in Directory.GetFiles(args[0], "*,v", SearchOption.AllDirectories))
  {
    using (FileStream sin=File.Open(file, FileMode.Open, FileAccess.ReadWrite))
    {
      sin.Position=sin.Length-1;
      if (sin.ReadByte()==0x40)
      {
        Console.WriteLine("fixed "+file);
        sin.WriteByte(0xa);
      }
    }
  }
}

其他提示

就我而言,该机构存在腐败行为。 symbols 的部分 xxx,v 文件。预期的格式是 标签名:标签版本, ,但也有这样的例子:

  • 丢失的 :标签版本
    例如 标签名
    通过删除该行来修复。
  • 多种的 标签名
    例如 标签名1:标签名称2:标签版本
    通过删除第二个标签名称来修复(您删除的标签名称可能取决于它们是什么)。
  • 名称/修订分隔符无效。就我而言,无效字符始终是 z (ASCII 码之间只有 1 位差异 :z).
    例如 标签名z标签版本
    通过更换来修复 z:.

为了在我的调查过程中提供帮助,我添加了一个 print 线路到 cvs2svn_rcsparse\common.py. 。如果解析符号失败,则原因是最后打印的标签。

def _parse_admin_symbols(self, token):
while 1:
  tag_name = self.ts.get()
  # WileCau print the token and tag_name
  print 'token=|%s| tag_name=|%s|' % (token, tag_name)
  if tag_name == ';':
    break
  self.ts.match(':')
  tag_rev = self.ts.get()
  self.sink.define_tag(tag_name, tag_rev)

额外的打印会给输出添加相当多的噪音,因此仅在发生异常时打印可能会更好,但这足以满足我的需求。


我还发现这个链接,事实证明这不是我的问题,但可能对其他人有帮助。感谢 Christian Haarmann 对其进行了记录。

http://tigris-scm.10930.n7.nabble.com/suggestions-for-cvs2svn-fix-for-error-quot-myfile-txt-v-is-not-a-valid-v-file-quot- td54240.html

如果链接无效,则摘要是有人编辑了该链接 xxx,v 文件及其编辑器已将 0x0A (LF) 替换为 0x0D/0x0A (CR/LF),附加字符导致解析器认为文件已损坏。

我也有这样的错误。当我使用 cvs2git 将 cvs 存储库迁移到 git 时,多个文件都会出现此错误。我发现缺少关闭 0x40(@) 在文件末尾。

所以我的解决方案是:

1. Open the corrupted cvs-history-file e.g. with vim (maybe in binary mode)
2. Add the missing @

如果这不能解决问题,请将损坏文件的内容与 RCS 文件格式进行比较: rcs_man_page

来解决这一点的一种方式是运行rcs log *file,v*,这可以提供你的一些见解。

在我的情况,我有一些文件丢失@的,有些文件丢失分号,和工具,我用来导入我的老仓库到cvspserver在未参考的版本已经抛出。

祝你好运!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top