كيف يمكنني إزالة ملفات .DS_Store من مستودع Git؟
سؤال
كيف يمكنني إزالة تلك الملفات المزعجة لنظام التشغيل Mac OS X .DS_Store
الملفات من مستودع Git؟
المحلول
إزالة الملفات الموجودة من المستودع:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
أضف السطر
.DS_Store
إلى الملف .gitignore
, ، والتي يمكن العثور عليها في المستوى الأعلى لمستودعك (أو تم إنشاؤها إذا لم تكن موجودة بالفعل).يمكنك القيام بذلك بسهولة باستخدام هذا الأمر الموجود في الدليل العلوي
echo .DS_Store >> .gitignore
ثم
git add .gitignore
git commit -m '.DS_Store banished!'
نصائح أخرى
الجمع بين إجابات benzado وwebmat والتحديث باستخدام git rm
, ، وعدم الفشل في الملفات التي تم العثور عليها والتي ليست في الريبو، وجعلها قابلة لللصق بشكل عام لأي مستخدم:
# remove any existing files from the repo, skipping over ones not in repo
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
# specify a global exclusion list
git config --global core.excludesfile ~/.gitignore
# adding .DS_Store to that list
echo .DS_Store >> ~/.gitignore
أفضل حل لمعالجة هذه المشكلة هو تجاهل هذه الملفات عالميًا من جميع مستودعات git الموجودة على نظامك.يمكن القيام بذلك عن طريق إنشاء ملف gitignore عالمي مثل:
vi ~/.gitignore_global
إضافة قواعد لتجاهل الملفات مثل:
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
الآن، أضف هذا الملف إلى تكوين git العمومي الخاص بك:
git config --global core.excludesfile ~/.gitignore_global
يحرر:
تمت إزالة الرموز لأنها قد تحتاج إلى الالتزام بها كأصول للتطبيق.
في بعض المواقف قد ترغب أيضًا في تجاهل بعض الملفات بشكل عام.بالنسبة لي، .DS_Store هو واحد منهم.إليك الطريقة:
git config --global core.excludesfile /Users/mat/.gitignore
(أو أي ملف من اختيارك)
ثم قم بتحرير الملف تمامًا مثل .gitignore الخاص بالريبو.لاحظ أنني أعتقد أنه يجب عليك استخدام المسار المطلق.
إذا لم تتمكن من إزالة الملفات لأنها تحتوي على تغييرات مرحلية، فاستخدمها:
git rm --cached -f *.DS_Store
اضطررت إلى تغيير git-rm إلى git rm في ما سبق لتشغيله:
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
افتح الوحدة الطرفية واكتب "cd <ProjectPath>"
إزالة الملفات الموجودة:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
nano .gitignore
اضف هذا
.DS_Store
اكتب "ctrl + x"
اكتب "ص"
أدخل لحفظ الملف
git add .gitignore
git commit -m '.DS_Store removed.'
الإجابة التي تم التصويت عليها رائعة، ولكن مساعدة المبتدئين مثلي، إليك كيفية إنشاء ملف .gitignore، وتحريره، وحفظه، وإزالة الملفات التي ربما تكون قد أضفتها بالفعل إلى git، ثم دفع الملف إلى Github.
قم بإنشاء ملف .gitignore
لإنشاء ملف .gitignore، يمكنك فقط touch
الملف الذي يقوم بإنشاء ملف فارغ بالاسم المحدد.نريد إنشاء الملف المسمى .gitignore حتى نتمكن من استخدام الأمر:
touch .gitignore
تجاهل الملفات
يجب عليك الآن إضافة السطر الذي يخبر git بتجاهل ملفات DS Store إلى .gitignore.يمكنك استخدام محرر النانو للقيام بذلك.
nano .gitignore
النانو جميل لأنه يتضمن تعليمات حول كيفية الخروج منه.(كنترول-يا للحفظ، كنترول-X للخروج)
انسخ والصق بعض الأفكار من هذا جوهر جيثب الذي يسرد بعض الملفات الشائعة التي يجب تجاهلها.ولعل أهمها للإجابة على هذا السؤال ما يلي:
# OS generated files #
######################
.DS_Store
.DS_Store?
# عبارة عن تعليقات، وسوف تساعدك على تنظيم ملفك أثناء نموه.
هذا مقالة جيثب لديه أيضًا بعض الأفكار والمبادئ التوجيهية العامة.
قم بإزالة الملفات المضافة بالفعل إلى git
أخيرًا، تحتاج فعليًا إلى إزالة ملفات DS Store من الدليل الخاص بك.
استخدم هذا الأمر الرائع من الإجابة الأعلى صوتًا.سيؤدي هذا إلى تصفح كافة المجلدات الموجودة في الدليل الخاص بك، وإزالة تلك الملفات من git.
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
ادفع .gitignore إلى Github
الخطوة الأخيرة، تحتاج فعليًا إلى الالتزام بملف .gitignore الخاص بك.
git status
git add .gitignore
git commit -m '.DS_Store banished!'
حذفها باستخدام git-rm
, ، ثم قم بإضافة .DS_Store إلى .gitignore
لمنع إضافتهم مرة أخرى.تستطيع ايضا استخذام blueharvest لمنعهم من الإنشاء معًا
استخدم هذا الأمر لإزالة الملفات الموجودة:
find . -name '*.DS_Store' -type f -delete
ثم أضف .DS_Store
ل .gitignore
ما يلي يعمل بشكل أفضل بالنسبة لي.التعامل مع الملفات غير المتطابقة، والملفات ذات التعديلات المحلية.كمرجع، كان هذا على نظام Mac 10.7 يعمل بنظام git 1.7.4.4.
البحث عن وإزالة:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f
أنا أيضًا أتجاهل عالميًا .DS_Store عبر جميع المستودعات عن طريق تعيين ملف core.excludesfile عالمي.
أولاً، قم بإنشاء الملف (إذا لم يكن موجودًا بالفعل):
touch ~/.gitignore
ثم أضف السطر التالي واحفظه:
.DS_Store
الآن قم بتكوين git لاحترام الملف عالميًا:
git config --global core.excludesfile ~/.gitignore
في حالة رغبتك في إزالة ملفات DS_Store من كل مجلد ومجلد فرعي:
في حالة DS_Store الملتزم به بالفعل:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
تجاهلهم عن طريق:
echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global
لقد وجدت أن السطر التالي من snippr يفعل الأفضل في مسح الكل .DS_Store
, ، بما في ذلك الذي يحتوي على تعديلات محلية.
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
--cached
الخيار، ويحافظ على المحلية الخاصة بك .DS_Store
لأنه سيتم إعادة إنتاجه على أي حال.
ومثلما ذكرنا جميعًا أعلاه، أضف .DS_Store
إلى ملف .gitignore على جذر مشروعك.ثم لن يكون في نظرك (من اتفاقيات إعادة الشراء).
لقد تأخرت قليلاً عن الحفلة، لكن لدي إجابة جيدة.لإزالة ملفات .DS_Store، استخدم الأوامر التالية من نافذة طرفية، ولكن كن حذرًا جدًا عند حذف الملفات باستخدام "العثور على".يعد استخدام اسم محدد مع خيار -name إحدى الطرق الأكثر أمانًا لاستخدامه:
cd directory/above/affected/workareas
find . -name .DS_Store -delete
يمكنك ترك "-delete" إذا كنت تريد ببساطة إدراجها قبل وبعد.وهذا سوف يطمئنك أنهم رحلوا.
فيما يتعلق بنصيحة ~/.gitignore_global:كن حذرا هنا.تريد وضع هذا الملف اللطيف في .gitignore ضمن المستوى الأعلى من كل من الحلفاء وارتكابه ، بحيث يكتسب أي شخص يستنسخ ريبو الخاص بك الاستفادة من استخدامه.
هذا سيفي بالغرض:
find . -name "*.DS_Store" -type f -exec git-rm {} \;
يقوم بحذف كافة الملفات التي تنتهي أسماؤها بـ .DS_Store
, ، مشتمل ._.DS_Store
.
لسبب ما، لم يعمل أي مما سبق على جهاز Mac الخاص بي.
الحل الخاص بي هو من التشغيل الطرفي:
rm .DS_Store
ثم قم بتشغيل الأمر التالي:
git pull origin master
عند تهيئة المستودع الخاص بك، قم بتخطي أمر git الذي يحتوي على
-u
ولا ينبغي أن تكون مشكلة.
نجح هذا بالنسبة لي، مزيج من إجابتين من الأعلى:
- $ git rm --cached -f *.DS_Store
- $ git الالتزام -m "فلتر الفرع-index-filter 'git rm-cached-ignore-unmatch .ds_store"
- $ git Push Origin master --force
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force
هناك بعض الحلول لحل هذه المشكلة.لتجنب إنشاء ملفات .DS_Store، لا تستخدم OS X Finder لعرض المجلدات.هناك طريقة بديلة لعرض المجلدات وهي استخدام سطر أوامر UNIX.لإزالة ملفات .DS_Store، يمكن استخدام منتج تابع لجهة خارجية يسمى DS_Store Terminator.لحذف ملفات .DS_Store من النظام بأكمله، يمكن استخدام أمر UNIX shell.تشغيل محطة من التطبيقات: المرافق في موجه UNIX SHELL أدخل الأمر UNIX التالي:Sudo find / -name ".DS_Store" -عمق -exec rm {} \;عندما يُطلب منك كلمة مرور، أدخل كلمة مرور مسؤول Mac OS X.
يهدف هذا الأمر إلى البحث عن كافة تكرارات .DS_Store وإزالتها بدءًا من جذر (/) نظام الملفات عبر الجهاز بأكمله.لتكوين هذا الأمر ليتم تشغيله كمهمة مجدولة، اتبع الخطوات التالية:تشغيل محطة من التطبيقات: المرافق في موجه UNIX SHELL أدخل الأمر UNIX التالي:
sudo crontab -e عند المطالبة بكلمة مرور ، أدخل كلمة مرور مسؤول Mac OS X.بمجرد دخولك إلى محرر vi، اضغط على الحرف I على لوحة المفاتيح لديك مرة واحدة وأدخل ما يلي:
15 1 * * * العثور على الجذر / -اسم ".DS_Store" -عمق -exec rm {} \;
وهذا ما يسمى إدخال crontab، والذي يحتوي على التنسيق التالي:
دقيقة ساعة DayOfMonth شهر DayOfWeek أمر المستخدم.
يعني إدخال crontab أنه سيتم تنفيذ الأمر بواسطة النظام تلقائيًا في الساعة 1:15 صباحًا كل يوم بواسطة الحساب المسمى root.
يبدأ الأمر من البحث وصولاً إلى .إذا لم يكن النظام قيد التشغيل، فلن يتم تنفيذ هذا الأمر.
لحفظ الإدخال، اضغط على مفتاح Esc مرة واحدة، ثم اضغط في نفس الوقت على Shift + z+ z.
ملحوظة:المعلومات الواردة في الخطوة 4 مخصصة للمحرر vi فقط.
أضف هذا إلى ملفك .gitignore
#Ignore folder mac
.DS_Store
احفظ هذا وقم بالالتزام
git add -A
git commit -m "ignore .DS_Store"
والآن تتجاهل هذا لجميع التزاماتك
إزالة الملفات التي تم تجاهلها:
(.DS_Store)
$ find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
لا حاجة لإزالة .DS_STORE
محليا
فقط أضفه إلى .gitignore
ملف
الملف .gitignore هو مجرد ملف نصي يخبر Git بالملفات أو المجلدات التي يجب تجاهلها في المشروع.
الأوامر
nano .gitignore
- يكتب
.DS_Store
ثم اضغطCTRL+X > y > Hit Return
git status
لإلقاء نظرة أخيرة على التغييرات الخاصة بكgit add .gitignore
git commit -m 'YOUR COMMIT MESSAGE'
git push origin master