التعامل مع اسم الملف غير حساس لحالة الأحرف في Mercurial

StackOverflow https://stackoverflow.com/questions/238608

  •  04-07-2019
  •  | 
  •  

سؤال

أنا أستخدم TortoiseHg 0.5 (الذي يتضمن Mercurial 1.0.2) على نظام التشغيل Vista64.فهمي من كتاب الزئبقي هو أن Mercurial يجب أن يتعامل مع أسماء الملفات بطريقة غير حساسة لحالة الأحرف على نظام ملفات غير حساس لحالة الأحرف (مثل NTFS، وهو ما أستخدمه الآن).ومع ذلك، أجد أن تثبيت Mercurial الخاص بي حساس في الواقع لحالة الأحرف:

>hg status -A foo
C foo
>hg status -A FOO
? FOO

هل يمكن أن يكون هذا خطأ في Mercurial، أو خطأ في إصدار TortoiseHg من Mercurial، أم أنه شيء آخر؟كيف يمكنني تحقيق معالجة أسماء الملفات غير الحساسة لحالة الأحرف من Mercurial على نظام التشغيل Windows؟

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

المحلول

تم حل هذه المشكلة في Mercurial 1.1!من ملاحظات الإصدار:“تحسين الصحة في مواجهة أنظمة الملفات القابلة للطي”.

على نظام التشغيل Windows، يتجاهل Mercurial الآن حالة الأحرف في وسيطات سطر الأوامر الخاصة به:

>hg status -A foo
C foo
>hg status -A FOO
C foo

ويدرك أيضًا أن تغييرات اسم الملف التي تتضمن حالة الأحرف فقط ليست ملفات جديدة:

>ren foo FOO
>hg status -A fOO
C foo

وبالتالي لم يعد هناك أي خطر لتجاهل التغييرات بسبب الأخطاء في سطر الأوامر.

ومع ذلك، انتبه إلى أن محتويات الملف .hgignore تظل حساسة لحالة الأحرف. هذه مشكلة فقط إذا كنت تستخدم بناء الجملة الشامل؛باستخدام صيغة regexp، يمكنك وضع (؟i) في بداية الأنماط لجعلها غير حساسة.

نصائح أخرى

أعتقد أنك أخطأت في قراءة كتاب hgbook.تصف مقدمة القسم 7.7 فقط الأنواع الثلاثة المختلفة لحساسية حالة الأحرف الموجودة في أنظمة التشغيل، ولا تقول أن الزئبقي سيعكس تلك الدلالات.

لاحقًا في القسم 7.7.2 "اكتشاف تعارضات الحالات"، يرد ما يلي:

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

عندما تفعل hg status -A FOO العملية التي تحدث داخل الزئبق هي:

  1. تحقق مما إذا كان هناك ملف موجود على نظام الملفات يطابق وسيطة الملف، "FOO"، - وفي هذه المرحلة أصبح غير حساس لحالة الأحرف، لذلك يبحث عن "foo" ويقول "نعم، لقد حصلت على ملف"
  2. تحقق مما إذا كان هناك إدخال في بيان الملف يتطابق مع وسيطة الملف ، "فو" ، وليس هناك ، لذلك تعرض الحالة "؟" قوله إنه ملف على القرص لا يتتبعه HG

لرؤية عدم اهتمام Mercurial بالحالة على NTFS بشكل أفضل، جرب الخطوات التالية:

  1. الحرف الأول زئبق
  2. خط الصدى> فو
  3. زئبق إضافة فو
  4. hg الالتزام -m "ملتزم Foo"
  5. تحرك فو لا فو
  6. تحرك ليس فو FOO
  7. حالة الزئبق

ويجب أن ترى hg يقول أنه لم يتغير شيء لأن الشيء الوحيد الذي تغير هو الحالة التي يتجاهلها hg بالنسبة لك.

عندما أفعل نفس الشيء على نظام Linux أرى بدلاً من ذلك:

! Foo
? FOO
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top