سؤال

أخيرا وجدت إجابة على سؤالي عندما أردت نشرها! ومع ذلك، سأظل نشرها، بما في ذلك إجابتي، في حالة مساعدة شخص آخر:

عند التحويل من CVS إلى Subversion CVS2SVN فشل في بعض الملفات مع الرسالة

"xxx is not a valid ,v file"

ما هي المشكلة؟

هل كانت مفيدة؟

المحلول

نظرا لأن الأمر اتضح CVSNT إغسل آخر 0xa من بعض الملفات التي يحتاجها CVS2SVN إليهم. يمكن إصلاح ذلك بسهولة مع رمز 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 ملف. التنسيق المتوقع هو tag_name.:tag_rev., ، ولكن كانت هناك حالات:

  • مفقود :tag_rev.
    على سبيل المثال tag_name.
    ثابت عن طريق حذف الخط.
  • مضاعف tag_name.
    على سبيل المثال TAG_NAME1.:TAG_NAME2.:tag_rev.
    تم إصلاحه عن طريق إزالة اسم العلامة الثاني (الذي تزيله ربما يعتمد على ما هي).
  • اسم غير صالح / محدد المراجعة. في حالتي كانت الشخصية غير صالحة دائما z (هناك فرق 1 بت فقط بين ASCII : و z).
    على سبيل المثال tag_name.ztag_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)

يضيف الطباعة الإضافية الكثير من الضوضاء إلى الإخراج حتى يكون من أجمل فقط طباعة فقط إذا حدث استثناء، ولكن هذا كان جيدا بما يكفي لاحتياجاتي.


لقد وجدت أيضا هذا الرابط الذي اتضح أنه لم يكن مشكلتي ولكن قد يساعد شخصا آخر. الائتمان للمسيحي هارمان لتوثيقها.

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