নির্দিষ্ট ফাইল টাইপ ব্যতীত একটি নির্দিষ্ট ফোল্ডারের অধীনে সমস্ত ফাইলকে যথাযথভাবে উপেক্ষা করুন


89

আমি অনুরূপ প্রশ্নগুলি দেখেছি ( 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প্রকারগুলি উপেক্ষা করে এবং অন্যান্য ফাইলগুলি ট্র্যাক করে।

উত্তর:


109

@ সিমন বুচান সঠিক।

গিট 1.8.2 যেহেতু, Resources/** !Resources/**/*.fooকাজ করে।


4
এটি আমার পক্ষে কাজ করে, সামান্য ঝাপটায়, আমি কেবল ডিরেক্টরীগুলি এবং নীচের সমস্ত কিছু সরিয়ে ফেলতে পারি যাতে করেছিলাম: DirectoryName1/** DirectoryName1/**/*তাদের প্রত্যেকটির জন্য। ফার্স ডিরেক্টরিগুলি সরিয়ে দেয় তবে সমস্ত ফাইলের প্রকার অপসারণ করতে আপনার দ্বিতীয়টি দরকার।
স্কালাল উত্সাহিত

27

সর্বোত্তম উত্তর হ'ল সংস্থানসমূহের অধীনে একটি সংস্থান / .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

আপনি যদি উল্লেখের চেয়ে আরও গভীরতর ডিরেক্টরি যুক্ত করেন তবে আপনাকে সেই প্যাটার্নটি সম্পাদনা করতে হবে।


4
দুঃখজনক
হ'ল

এখানে একই সমাধানের জন্য আরও বিশদটি দেখুন: স্ট্যাকওভারফ্লো / প্রশ্ন / 80৮০৩68৮৯ /… - ওপি @ নওফাল দ্বারা উপরের লিঙ্ক
এখানে

7

এটি বোকা লাগতে পারে তবে আপনি ইতিমধ্যে সূচকে উপেক্ষা করার চেষ্টা করছেন এমন ফোল্ডার / ফাইলগুলি ইতিমধ্যে যুক্ত না করেছেন কিনা তা পরীক্ষা করে দেখুন। যদি আপনি তা করেন তবে আপনি আপনার .gitignore ফাইলটিতে যা রেখেছেন তা বিবেচ্য নয়, ফোল্ডারগুলি / ফাইলগুলি এখনও মঞ্চস্থ হবে।


4
যদি কেউ এই নির্দিষ্ট ব্যবহারের ক্ষেত্রে git rm --cached <path to files>দৌড়াদৌড়ি করেন তবে আপনি এই উপেক্ষা করা ফাইলগুলি ফাইল সিস্টেমে রেখে গিটের বাইরে সাফ করার জন্য ব্যবহার করতে পারেন ।
slothluvchunk

5

হয় আমি এটি ভুলভাবে করছি, বা গৃহীত উত্তর বর্তমান গিট দিয়ে আর কাজ করে না।

আমি আসলে সঠিক সমাধান পাওয়া যায় এবং এটা প্রায় একই প্রশ্ন অধীনে পোস্ট করেছেন এখানে । বিস্তারিত জানার জন্য সেখানে যান।

সমাধান:

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

4
হ্যাঁ, এটি আমার পক্ষে কাজ করে। !/Resources/**/গিটটি সাব-ডিরেক্টরিকে অগ্রাহ্য না করার জন্য এটি যোগ করা অত্যন্ত গুরুত্বপূর্ণ।
জনস্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.