it-swarm.asia

تجاهل بشكل صحيح جميع الملفات بشكل متكرر تحت مجلد معين باستثناء نوع ملف معين

لقد رأيت أسئلة مماثلة ( 1 ، 2 و 3 ) ، لكنني لا أحصل على حل مناسب منها.

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

هذا هو الحل الأكثر شيوعًا (في جميع الأسئلة المكررة)

# Ignore everything
*

# Don't ignore directories, so we can recurse into them
!*/

# Don't ignore .gitignore
!.gitignore

# Now exclude our type
!*.foo

المشكلة في هذا الحل هي أن يتوقف عن تتبع الملفات المضافة حديثًا (حيث يتجاهل * جميع الملفات). لا أريد الاحتفاظ باستثناء كل نوع ملف. أريد سلوكًا عاديًا في حالة إضافة أي ملف جديد ، يعرضه git status.

حصلت أخيرا على حل هنا . الحل هو إضافة ملف .gitignore آخر في مجلد Resources. هذا يعمل بشكل صحيح.

هل يمكنني تحقيق ذلك بملف تجاهل واحد؟ أجد وجود العديد من تجاهل الملفات في الدلائل المختلفة عالي الكعب.

هذا ما أحاول تحقيقه:

# Ignore everything under Resources folder, not elsewhere
Resources

# Don't ignore directories, so we can recurse into them
!*Resources/

# Now exclude our type
!*.foo

ولكن هذا يعطي الناتج المعاكس. يتجاهل أنواع *.foo ويتتبع الملفات الأخرى.

73
nawfal

SimonBuchan صحيح.

منذ git 1.8.2 ، يعمل Resources/** !Resources/**/*.foo.

94
Jim G.

أفضل إجابة هي إضافة ملف/gitignore موارد ضمن الموارد التي تحتوي على:

# Ignore any file in this directory except for this file and *.foo files
*
!/.gitignore
!*.foo

إذا كنت غير راغب أو غير قادر على إضافة ملف .gitignore ، فهناك حل غير مناسب:

# Ignore any file but *.foo under Resources. Update this if we add deeper directories
Resources/*
!Resources/*/
!Resources/*.foo
Resources/*/*
!Resources/*/*/
!Resources/*/*.foo
Resources/*/*/*
!Resources/*/*/*/
!Resources/*/*/*.foo
Resources/*/*/*/*
!Resources/*/*/*/*/
!Resources/*/*/*/*.foo

ستحتاج إلى تعديل هذا النمط إذا قمت بإضافة أدلة أعمق من المحدد.

23
Ben Martin

أنا أفعل ذلك خطأ أو إجابة مقبولة لا يعمل بعد الآن مع بوابة الحالية.

لقد وجدت بالفعل الحل المناسب ونشرته تحت نفس السؤال هنا . لمزيد من التفاصيل رئيس هناك.

حل:

# Ignore everything inside Resources/ directory
/Resources/**
# Except for subdirectories(won't be commited anyway if there is no commited file inside)
!/Resources/**/
# And except for *.foo files
!*.foo
3
Aleksander Stelmaczonek

قد يبدو هذا غبيًا ، ولكن تحقق مما إذا لم تقم بالفعل بإضافة المجلد/الملفات الذي تحاول تجاهله إلى الفهرس من قبل. إذا قمت بذلك ، لا يهم ما وضعته في ملف .gitignore الخاص بك ، ستظل المجلدات/الملفات مقسمة.

3
Tiago