كيف يمكنني إزالة ملفات .DS_Store من مستودع Git؟

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

  •  01-07-2019
  •  | 
  •  

سؤال

كيف يمكنني إزالة تلك الملفات المزعجة لنظام التشغيل 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>"

  1. إزالة الملفات الموجودة:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

  2. nano .gitignore

  3. اضف هذا .DS_Store

  4. اكتب "ctrl + x"

  5. اكتب "ص"

  6. أدخل لحفظ الملف

  7. git add .gitignore

  8. 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top