5

質問を投稿したかったときに、ついに質問に対する答えを見つけました!ただし、他の人に役立つ場合に備えて、回答を含めて投稿します。

CVS から Subversion への変換時に cvs2svn がいくつかのファイルで失敗し、メッセージが表示されました

"xxx is not a valid ,v file"

どうしたの?

4

4 に答える 4

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);
      }
    }
  }
}
于 2009-04-21T18:30:15.453 に答える
1

私の場合、ファイルのsymbolsセクションに破損がありました。xxx,v予想される形式は ですが、次のインスタンスがありました:tag_name:tag_rev

  • 欠落例行を削除して修正。:tag_rev
    tag_name
  • 複数のtag_name
    例2 番目のタグ名を削除することで修正されました (削除するものは、おそらくそれらが何であるかによって異なります)。tag_name1:tag_name2:tag_rev
  • 名前/リビジョンの区切り文字が無効です。私の場合、無効な文字は常にありました (ASCIIとzの間には 1 ビットの違いしかありません)。例を に置き換えると修正されます。:z
    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ファイルを編集し、その編集者が 0x0A (LF) を 0x0D/0x0A (CR/LF) に置き換えたため、追加の文字によってパーサーがファイルが破損していると判断したことです。

于 2015-12-18T10:08:11.000 に答える
0

これをトラブルシューティングする 1 つの方法は、 を実行rcs log *file,v*することです。これにより、洞察が得られる場合があります。

私の場合、@ のないファイルやセミコロンのないファイルがいくつかあり、古いリポジトリを cvspserver にインポートするために使用したツールが、参照されていないバージョンをスローしていました。

幸運を!

于 2015-12-06T02:54:41.417 に答える