it-swarm.dev

كيف يمكنني إجراء تغييرات على أسماء الملفات الحساسة لحالة الأحرف فقط في Git؟

لقد غيرت اسمًا لعدد قليل من الملفات عن طريق إلغاء الأحرف الكبيرة للحرف الأول ، كما في Name.jpg إلى name.jpg. Git لا يتعرف على هذه التغييرات واضطررت إلى حذف الملفات وتحميلها مرة أخرى. هل هناك طريقة تجعل Git حساسة لحالة الأحرف عند التحقق من التغييرات في أسماء الملفات؟ لم أجري أي تغييرات على الملف نفسه.

1020
Gil Shulman

يمكنك استخدام git mv :

git mv -f OldFileNameCase newfilenamecase
1229
Keith Smiley

يحتوي Git على إعداد تكوين يخبره ما إذا كان يجب أن يكون حساسًا لحالة الأحرف أو غير حساس: core.ignorecase. لتخبر Git أن يكون خاطئًا ، قم ببساطة بتعيين هذا الإعداد على false:

git config core.ignorecase false

كابل بيانات

من git config الوثائق :

core.ignorecase

إذا كان هذا صحيحًا ، فإن هذا الخيار يمكّن الحلول البديلة المختلفة من تمكين git من العمل بشكل أفضل على أنظمة الملفات غير الحساسة لحالة الأحرف ، مثل FAT. على سبيل المثال ، إذا عثرت قائمة الدليل على makefile عندما تتوقع git Makefile ، ستفترض git أنها حقًا نفس الملف وتستمر في تذكرها على أنها Makefile.

الإعداد الافتراضي خاطئ ، باستثناء git-clone (1) أو git-init (1) سوف يبحث وضبط core.ignorecase صحيحًا إذا كان ذلك مناسبًا عند إنشاء المخزون.

أنظمة الملفات غير الحساسة لحالة الأحرف

نظامي التشغيل الأكثر شيوعًا اللذين لديهما أنظمة ملفات غير حساسة لحالة الأحرف أعرفها

  • شبابيك
  • OS X
825
user456814

باستخدام SourceTree كنت قادرا على القيام بذلك كل شيء من واجهة المستخدم

  1. إعادة تسمية FILE.ext إلى whatever.ext
  2. المرحلة هذا الملف
  3. الآن إعادة تسمية whatever.ext إلى file.ext
  4. المرحلة هذا الملف مرة أخرى

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

104
Chris Barr

هذا ما فعلته على OS X:

git mv File file.tmp
git mv file.tmp file

خطوتين لأنه بخلاف ذلك حصلت على خطأ "الملف موجود". ربما يمكن القيام بذلك في خطوة واحدة عن طريق إضافة --cached أو ما شابه.

102
Sijmen Mulder

تحت OSX ، لتجنب هذه المشكلة وتجنب المشكلات الأخرى المتعلقة بالتطوير على نظام ملفات غير حساس لحالة الأحرف ، يمكنك استخدام Disk Utility إنشاء حالة حساسة محرك أقراص ظاهري / صورة قرص.

قم بتشغيل الأداة المساعدة للقرص ، وإنشاء صورة جديدة للقرص ، واستخدام الإعدادات التالية (أو التغيير حسب رغبتك ، مع إبقائها حساسة لحالة الأحرف):

Mac Disk Utility Screenshot

تأكد من معرفة أنه الآن في حالة FS حساسة:

git config core.ignorecase false
41
user1821510

قد يكون من المفيد في بعض الأحيان مؤقتًا تغيير حساسية حالة Git. طريقتان ممكنتان: -

الطريقة 1 (مؤقت للغاية):

git -c core.ignorecase=true checkout mybranch لإيقاف تشغيل حساسية الحالة للأمر checkout. أو بشكل عام: git -c core.ignorecase=<<true or false>><<command>> . ((الفضل في VonC لاقتراحه في التعليقات.)}

الطريقة 2 (شبه دائمة):

لتغيير الإعداد لفترة أطول (على سبيل المثال إذا كانت هناك حاجة إلى تشغيل أوامر متعددة قبل تغييرها مرة أخرى):

  1. git config core.ignorecase (يُرجع هذا الإعداد الحالي ، على سبيل المثال false).
  2. git config core.ignorecase<<true or false>>- اضبط الإعداد الجديد المطلوب.
  3. ... تشغيل أوامر أخرى متعددة ...
  4. git config core.ignorecase<<false or true>>- عيّن قيمة التكوين إلى إعداده السابق.
27
Steve Chambers

1) إعادة تسمية الملف Name.jpg إلى name1.jpg

2) ارتكاب ملف تمت إزالته Name.jpg

3) إعادة تسمية الملف name1.jpg إلى name.jpg

4) تعديل ملف مضاف name.jpg إلى الالتزام السابق

git add
git commit --amend
15
razon

جربت الحلول التالية من الإجابات الأخرى ولم تنجح:

إذا تم استضافة مستودعك عن بعد (GitHub ، GitLab ، BitBucket) ، يمكنك إعادة تسمية الملف على Origin (GitHub.com) وفرض إعادة تسمية الملف بطريقة من أعلى إلى أسفل.

تتعلق الإرشادات أدناه بـ GitHub ، ومع ذلك يجب أن تنطبق الفكرة العامة وراءها على أي نظام أساسي لاستضافة المستودعات عن بُعد. ضع في اعتبارك نوع الملف الذي تحاول إعادة تسميته ، أي ما إذا كان نوع الملف الذي يعتبره GitHub قابلاً للتحرير (رمز ، نص ، إلخ) أو غير قابل للتعديل (صورة ، ثنائي ، إلخ) داخل المتصفح.

  1. زيارة GitHub.com
  2. انتقل إلى مستودعك على GitHub.com وحدد الفرع الذي تعمل فيه
  3. باستخدام أداة تنقل الملفات في الموقع ، انتقل إلى الملف الذي تنوي إعادة تسميته
  4. هل يتيح لك GitHub تحرير الملف داخل المتصفح؟
    • أ.) قابل للتحرير
      1. انقر على أيقونة "تحرير هذا الملف" (يبدو كقلم رصاص)
      2. تغيير اسم الملف في إدخال اسم الملف
    • ب.) غير قابل للتعديل [.
      1. افتح زر "تنزيل" في علامة تبويب جديدة واحفظ الملف على جهاز الكمبيوتر الخاص بك
      2. إعادة تسمية الملف الذي تم تنزيله
      3. في علامة التبويب السابقة على GitHub.com ، انقر على أيقونة "حذف هذا الملف" (يبدو وكأنه سلة مهملات)
      4. تأكد من تحديد زر الاختيار "الالتزام مباشرة بالفرع branchname" وانقر فوق الزر "الالتزام بالتغييرات"
      5. ضمن نفس الدليل على GitHub.com ، انقر فوق الزر "تحميل الملفات"
      6. قم بتحميل الملف المعاد تسميته من جهاز الكمبيوتر الخاص بك
  5. تأكد من تحديد زر الاختيار "الالتزام مباشرة بالفرع branchname" وانقر فوق الزر "الالتزام بالتغييرات"
  6. محليا ، الخروج/جلب/سحب الفرع
  7. فعله
11
gmeben

يعمل Mac OSX High Sierra 10.13 على إصلاح هذا إلى حد ما. ما عليك سوى إنشاء قسم APFS افتراضي لمشاريع git الخاصة بك ، افتراضيًا ، لا يوجد به حد للحجم ولا يشغل مساحة.

  1. في Disk Utility ، انقر فوق الزر + أثناء تحديد قرص Container
  2. حدد APFS (حساس لحالة الأحرف) ضمن التنسيق
  3. سمّها Sensitive
  4. ربح
  5. اختياري: إنشاء مجلد في Sensitive يسمى git و ln -s /Volumes/Sensitive/git /Users/johndoe/git

سيكون محرك الأقراص الخاص بك في /Volumes/Sensitive/

 enter image description here

كيف يمكنني إجراء تغييرات اسم الملف فقط حساسة لحالة الأحرف في Git؟

5
Ray Foss

لقد استخدمت تلك الخطوات التالية:

git rm -r --cached .
git add --all .
git commit -a -m "Versioning untracked files"
git Push Origin master

بالنسبة لي هو حل بسيط

4
andrewvergel

على غرار إجابة Sijmen @ ، هذا هو ما نجح في OSX عندما إعادة تسمية دليل (مستوحاة من هذا إجابة من منشور آخر):

git mv CSS CSS2
git mv CSS2 css

ببساطة القيام git mv CSS css أعطى خطأ الوسيطة غير صالح: fatal: renaming '/static/CSS' failed: Invalid argument ربما لأن نظام ملفات OSX هو غير حساس لحالة الأحرف

ص. راجع للشغل إذا كنت تستخدم Django ، فلن يتعرف collectstatic أيضًا على اختلاف الحالة وعليك القيام بما سبق ، يدويًا ، في دليل الجذر الثابت أيضًا

4
Anupam

لقد واجهت هذه المشكلة عدة مرات على نظام التشغيل MacOS. Git حساس لحالة الأحرف ولكن نظام Mac هو الحفاظ على الحالة فقط.

شخص ما يرتكب ملفًا: Foobar.Java وبعد بضعة أيام يقرر إعادة تسميته إلى FooBar.Java. عندما تقوم بسحب أحدث رمز ، فإنه يفشل مع The following untracked working tree files would be overwritten by checkout...

الطريقة الوحيدة الموثوقة التي رأيتها تعمل على إصلاح ذلك هي:

  1. git rm Foobar.Java
  2. ارتكبها برسالة لا يمكن أن تفوتك git commit -m 'TEMP COMMIT!!'
  3. سحب. شد
  4. سيؤدي ذلك إلى ظهور تعارض يظهر لك دمج التعارض - لأن التغيير الذي قمت بحذفه ، ولكن التغيير الآخر أعيد تسميته (ومن هنا جاءت المشكلة)
    1. قبول التغيير الخاص بك وهو "الحذف"
    2. git rebase --continue
  5. الآن قم بإسقاط الحل البديل git rebase -i HEAD~2 و drop the TEMP COMMIT!!
  6. تأكد من أن الملف يسمى الآن FooBar.Java
3
Ashwin Jayaprakash

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

  1. إزالة جميع الملفات والمجلدات غير git إلى مجلد/مستودع مختلف.
  2. الالتزام بمجلد git الفارغ الحالي (سيظهر هذا عند حذف جميع الملفات.)
  3. إضافة جميع الملفات مرة أخرى إلى مجلد/بوابة git الأصلي.
  4. ارتكاب مجلد بوابة غير فارغ الحالي.

سيؤدي ذلك إلى حل جميع مشكلات الحالة دون محاولة معرفة الملفات أو المجلدات التي قمت بإعادة تسميتها.

2
Ricardo Virtudazo Jr

إذا لم ينجح أي شيء ، استخدم git rm filename لحذف الملف من القرص وإضافته مرة أخرى.

0
gopal Pandey