cvs2svn失败,“xxx不是有效的,v文件”

时间:2009-04-21 18:30:04

标签: svn cvs cvs2svn

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

当从CVS转换为Subversion时cvs2svn在某些带有消息的文件上失败

"xxx is not a valid ,v file"

有什么问题?

4 个答案:

答案 0 :(得分:3)

事实证明,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);
      }
    }
  }
}

答案 1 :(得分:1)

就我而言,symbols文件的xxx,v部分存在损坏。预期格式为tag_name:tag_rev,但有以下情况:

  • 缺少:tag_rev例如tag_name
    通过删除该行修复。
  • 多个tag_name例如tag_name1:tag_name2:tag_rev通过删除第二个标记名称(您删除的标记可能取决于它们是什么)来修复。
  • 无效的名称/修订分隔符。在我的情况下,无效字符总是z(ASCII :z之间只有1位差异。)例如tag_nameztag_rev通过将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文件并且他们的编辑器用0x0D / 0x0A(CR / LF)替换了0x0A(LF),并且附加字符导致了解析器认为文件已损坏。

答案 2 :(得分:0)

我也有这样的错误。当我使用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

答案 3 :(得分:0)

解决此问题的一种方法是运行rcs log *file,v*,这可能会为您提供一些见解。

在我的情况下,我丢失了一些文件,有些文件缺少分号,而我用来将旧存储库导入到cvspserver的工具却抛出了一个未引用的版本。

祝你好运!