গিট সাব ফোল্ডার উপেক্ষা করুন


438

আমার। নেট সলিউশনটিতে আমার প্রচুর প্রকল্প রয়েছে। আমি সমস্ত "বিন / ডিবাগ" এবং "বিন / রিলিজ" ফোল্ডার (এবং তাদের বিষয়বস্তু) বাদ দিতে চাই, তবে তারপরে "বিন" ফোল্ডারটি নিজেই অন্তর্ভুক্ত রয়েছে এবং এতে যে কোনও dll রয়েছে।

"বিন /" দিয়ে .gitignore "ডিবাগ" এবং "রিলিজ" ফোল্ডারগুলিকে উপেক্ষা করে তবে "বিন" ফোল্ডারে থাকা কোনও ডিএল'রও উপেক্ষা করে।

.gitignore ফাইলে "বিন / ডিবাগ" বা "বিন / রিলিজ" ডিরেক্টরিগুলি বাদ দেয় না, যদি না আমি "সলিউশন / প্রজেক্ট / বিন / ডিবাগ" হিসাবে উপেক্ষা করার ধরণটিকে পুরোপুরি যোগ্যতা অর্জন করি - যা আমি হিসাবে করতে চাই না আমার সমাধানে প্রতিটি প্রকল্পের জন্য এই সম্পূর্ণ প্যাটার্নটি অন্তর্ভুক্ত করার পাশাপাশি এটি যুক্ত হওয়া কোনও নতুন প্রকল্পের জন্য যুক্ত করতে হবে।

কোন পরামর্শ?


কেন ডিএলএল যুক্ত করবেন? আপনি যদি তৃতীয় পক্ষের ডিএলএলকে উল্লেখ করছেন তবে আপনার সমস্ত প্রকল্পগুলি রেফারেন্স করে এমন একটি সাধারণ ফোল্ডার যুক্ত করা বুদ্ধিমান হতে পারে।
ধান

6
ধানের ডান - যদি সেগুলি তৃতীয় পক্ষের ডিএলএল হয় তবে সেগুলি সম্ভবত আপনার কোড থেকে দূরে সজ্জিত করা উচিত। আমার কাছে, যদিও মনে হচ্ছে আপনি নিজের বিল্ড পণ্য চেক করছেন যা সাধারণত আপনি যেতে চান না। আপনি তথ্যটি ট্র্যাক করতে গিট ব্যবহার করেন যা পুরোপুরি কোডে থাকে এবং কনফিগারেশন তৈরি করে। পণ্যগুলি, ভাল, পণ্য হয়। তাদের ট্র্যাকিংয়ের জন্য সমস্যা জিজ্ঞাসা করা হচ্ছে - উদাহরণস্বরূপ, আপনি যদি কোডটি পরিবর্তন করেন তবে নতুন পণ্যগুলি তৈরি এবং চেক করতে ভুলে যান তবে?
ক্যাসাবেল

সাবফোল্ডারগুলি বাদ দিয়ে আমার সমস্যা ছিল। এখানে লিখিত নির্ভুল নমুনা সহ সবকিছু চেষ্টা করেও সফল হয়নি। অবশেষে আমি ফোল্ডার নিদর্শনগুলির মধ্যে একটি অতিরিক্ত ফাঁকা রেখা যুক্ত করেছি এবং এটি কাজ করছে। হতে পারে কোনও এনকোডিংয়ের সমস্যা। আমি উইন্ডোজ রেখে এটিকে ইউটিএফ 8 এ এনকোড করেছি।
রোডবাম্প

উত্তর:


552

আপনি কি ওয়াইল্ডকার্ড ব্যবহার করে দেখেছেন?

Solution/*/bin/Debug
Solution/*/bin/Release

গিটের ১.৮.২ সংস্করণ সহ, আপনি **যে কোনও স্তরের উপ-ডিরেক্টরিগুলির সাথে মিল রাখতে ওয়াইল্ডকার্ডটিও ব্যবহার করতে পারেন :

**/bin/Debug/
**/bin/Release/

8
এটি কাজ করে, উদাহরণস্বরূপ সলিউশন / মডিউল / প্রকল্পের সাথে অন্য কোনও প্রকল্পের সাথে সাব-ফোল্ডার না থাকলে এখনই আমি / * / * / বিন / ডিবাগ এবং / * / * / * / বিন / ডিবাগ যুক্ত করেছি (উপটির জন্য ফোল্ডার)। দেখে মনে হচ্ছে আপনাকে আপনার ডিরেক্টরি কাঠামোর প্রতিটি স্তরের জন্য একটি ওয়াইল্ডকার্ড সাব ফোল্ডার যুক্ত করতে হবে।
মার্সেল

1
@ মার্সেল: আচ্ছা, গিট অবশ্যই আপনার যে ফাইলগুলিতে বলবে না সেটিকে অগ্রাহ্য করবে না - এটি ওয়াইল্ডকার্ডের সাথে মিলে যাওয়া যাই হোক না কেন উপেক্ষা করে, আর কম নয়।
ক্যাসাবেল

আমার মনে হয় ডাবল স্টার ডিরেক্টরি সীমানা অতিক্রম করবে, অর্থাত: / ** / বিন / ডিবাগ
ট্রেন্ট

11
@ তারাস: দুর্ভাগ্যক্রমে, এটি হয় না।
টুউকা মস্তোনেন

2
সম্পর্কিত ভিজ্যুয়াল স্টুডিওতে একটি বাগ ছিল **। এতক্ষণে ঠিক করা উচিত। লিঙ্ক
বোগাক

106

আপনি একই স্তরের প্রকল্পের সমস্ত ডিরেক্টরি উপেক্ষা করার জন্য শীর্ষ স্তরে .gitignore ব্যবহার করতে পারেন। উদাহরণ স্বরূপ:

Debug/
Release/

এটি তাত্ক্ষণিকভাবে আপডেট হওয়া উচিত যাতে আপনি গিটের স্থিতি করলে তা দৃশ্যমান। নিশ্চিত করুন যে এই ডিরেক্টরিগুলি ইতিমধ্যে গিটে যোগ করা হয়নি, কারণ এটি উপেক্ষাগুলিকে ওভাররাইড করবে।


ওপিএস $GIT_DIR/.git/info/excludeফাইলে নিদর্শনগুলি যুক্ত করেও এটি করা যেতে পারে ।
টিম হেনিগান

1
পার্থক্য হ'ল .gitignore ফাইল কোডটি অনুসরণ করবে, তাই এটি সর্বত্র প্রযোজ্য। যদিও বাদ দেওয়া ফাইলটি কেবলমাত্র আপনার সংগ্রহস্থলের কাছে স্থানীয়, অর্থাত্ এটি কেবলমাত্র সেই নির্দিষ্ট সংগ্রহস্থলের জন্যই প্রযোজ্য। অন্য প্রতিশ্রুতিবদ্ধদের যদি এই ডিরেক্টরিগুলি প্রতিশ্রুতিবদ্ধ করতে না চান তবে আমি .gitignore ব্যবহার করার পরামর্শ দেব।
Andreas

1
এটির সাথে আর একটি সমস্যা হ'ল যদি আপনার সমাধানে ডেবগ নামক একটি প্রকল্প থাকে, তবে এটিও এড়ানো হবে। আমি মনে করি সমাধানটি সমস্ত উত্তর এবং মন্তব্যের সংমিশ্রণ - সাধারণ বা রেফারেন্সড ডেল এর আলাদা ফোল্ডারে রাখার জন্য সমাধানটি পুনর্গঠন করুন, তারপরে "বিন /" উপেক্ষা করে এবং / অথবা ওয়াইল্ডকার্ড ব্যবহার করুন।
মার্সেল

16
+1 ডিরেক্টরি ইতিমধ্যে গিট যোগ করা হয়নি তা নিশ্চিত করার জন্য মন্তব্যের জন্য। যদি ইতিমধ্যে git rm -rf DirectoryName/
গিটটিতে

57

প্রশ্ন সমস্ত সাব-উপেক্ষা সম্পর্কে জিজ্ঞাসা করা হয় না, কিন্তু তাই আমি এটা পোস্ট করব আমি উত্তর যে কোন জায়গায় খুঁজে পাইনি: */*


1
কোন সুযোগ আপনি পরিষ্কার করতে পারে? আমি এটিতে সমস্ত প্রকারের তারতম্য চেষ্টা করেছি এবং git addসেই ডিরেক্টরিতে সমস্ত ডিরেক্টরি উপ-ডিরেক্টরিতে একটি ডিরেক্টরি এবং সমস্ত ফাইল উপেক্ষা করতে পারি না । আমি চেষ্টা করেছি dirname/, dirname/*, dirname/**, dirname/*/*, এমনকি মরিয়া হয়ে dirname/*/*/*, dirname/*/*/*/*, dirname/*/*/*/*/*
ক্রিস

3
*/*বর্তমান ডিরেক্টরিতে ফাইলগুলি নয় তবে সমস্ত উপ-ডিরেক্টরি উপেক্ষা করে। একটি নির্দিষ্ট সাব-ডাইরেক্টরি উপেক্ষা করার জন্য সাধারণত গিটিগনোর ব্যবহার। dirname, dirname/এবং dirname/*সমস্ত আমার জন্য কাজ করে। ইতিমধ্যে ডিরেক্টরিতে কিছু প্রতিশ্রুতিবদ্ধ হয়েছে?
মিগল্ড

এটি একেবারে নতুন রেপো - আমি চেষ্টাটির .gitমধ্যে পুরো ডিরেক্টরিটি মুছি, git initতারপরে git add --all .(পরেও চেষ্টা করেছি --all), 1.9.4.msysgit.1 ব্যবহার করে। আমার নামকৃত ডিরেক্টরিতে থাকা প্রতিটি খালি খালি সাব-ডাইরেক্টরি সূচকে যুক্ত করা হয় (টরটোজজিটে এবং চেক করা আছে git status)। .gitignoreশুরুতে কোনও প্রাসঙ্গিক লাইন নেই !তবে কিছুটা দ্বন্দ্ব হতে হবে। সময়কালে ফোল্ডারগুলি সরিয়ে এখনের জন্য সমাধান করা add। অনুমান করুন যে এটি এমন একটি যা নির্ণয়ের জন্য প্রয়োজনীয় তথ্য সরবরাহ করতে আরও কিছু খনন করা দরকার। আমাকে আশ্বস্ত করার জন্য ধন্যবাদ যে আমি সিনট্যাক্সকে ভুল বুঝছি না।
ক্রিস

আমার যদি কোনও ফোল্ডারের ভিতরে কোনও ফোল্ডারটি অগ্রাহ্য করা দরকার তবে প্রথমটি নয়? যেমন ফোরামে / উপেক্ষিত ফোল্ডারে / ... তবে তিনি ফোরাম নামক ফোল্ডারটি উপেক্ষা করবেন না
জিন কার্লোস র্যাকোস্কি

যার নাম বিন্দু দিয়ে শুরু হয় সেই ডিরেক্টরিকে অগ্রাহ্য করে এটি আমার পক্ষে কাজ করে না। " /। " এবং "। * / *" কাজ করে না।
টনি

44

উপরের সমস্ত উত্তর বৈধ, তবে আমার মনে হয় না এমন কিছু যা উল্লেখ করা হয় তা হ'ল একবার আপনি ডিরেক্টরিটি ডিরেক্টরি থেকে রেপোতে যুক্ত করলে, আপনি সেই ডিরেক্টরি / উপ-ডিরেক্টরিকে উপেক্ষা করতে পারবেন না যে ফাইলটি রয়েছে (গিটটি সেই নির্দেশকে উপেক্ষা করবে) )।

ইতোমধ্যে যুক্ত ফাইলগুলিকে অগ্রাহ্য করার জন্য

$ git rm --cached

অন্যথায় আপনাকে প্রথমে রেপোর টার্গেট ডিরেক্টরি থেকে সমস্ত ফাইল সরিয়ে ফেলতে হবে - এবং তারপরে আপনি সেই ফোল্ডারটি উপেক্ষা করতে পারবেন।


12
গিট আরএম - ক্যাচড যদি আপনি এগুলি ইতিহাসের থেকে অবরুদ্ধ / অপ্রাসঙ্গিক চান তবে ফাইলগুলি স্থানীয়ভাবে অক্ষত রাখতে চান।
এরিক রিপেন

29

আপনার .gitignore ফাইলটিতে সঠিক প্রবেশদ্বার স্থাপনের পাশাপাশি, আপনি যদি রেপোতে ইতিমধ্যে যুক্ত কিছু উপেক্ষা করার চেষ্টা করছেন, git rm -r /path/to/dirআপনার .gitignore ফাইলটিতে ডির যুক্ত করার আগে আপনাকে তা করতে হবে এবং প্রতিশ্রুতিবদ্ধ হবে। অন্যথায় গিটটি কেবল এড়িয়ে যাবে তা হ'ল আপনার উপেক্ষা নির্দেশ।


19

আমার মেশিনে কাজ করার জন্য আমি যেভাবে পেলাম তা হ'ল এটি এইভাবে করা:

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
/*.*

#Only Include these specific directories and subdirectories:
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/

আপনি যে স্তরটি অন্তর্ভুক্ত করতে চান তার জন্য কীভাবে আপনাকে স্পষ্টভাবে কন্টেন্টের অনুমতি দিতে হবে তা লক্ষ্য করুন। সুতরাং আমার কাছে থিমের অধীনে গভীর 5 টি উপ-ডিরেক্টরি রয়েছে তবে আমার এখনও এটি বানান করতে হবে ll

এটি এখানে @ ইয়্যারিনের মন্তব্য থেকে এসেছে: https://stackoverflow.com/a/5250314/1696153

এগুলি দরকারী বিষয়গুলি ছিল:

আমিও চেষ্টা করেছি

*
*/*
**/**

এবং **/wp-content/themes/**

অথবা /wp-content/themes/**/*

এর কোনওটিই আমার পক্ষে কাজ করেনি। প্রচুর ট্রেইল ও ত্রুটি!


13

সামগ্রী এবং উপ-ডিরেক্টরি বাদ দিতে:

**/bin/*

কেবলমাত্র সমস্ত উপ-ডিরেক্টরি বাদ দিতে কিন্তু সামগ্রীটি নিতে, "/" যুক্ত করুন:

**/bin/*/

9

সমস্ত উপ-ডিরেক্টরি উপেক্ষা করার জন্য আপনি কেবল ব্যবহার করতে পারেন:

**/

এটি গিটের 1.8.2 সংস্করণ হিসাবে কাজ করে।


8

/binডিরেক্টরিতে থাকা ফাইলগুলি ট্র্যাক করার সময় সমস্ত সাব-ফোল্ডারকে উপেক্ষা করার সাধারণ উপায় হ'ল আপনার প্রকল্পের .gitignore ফাইলটিতে নিম্নলিখিত লাইনটি যুক্ত করা:

bin/*/*

আপনি যদি কেবলমাত্র নামযুক্ত সাবফোল্ডারগুলিকেই উপেক্ষা করতে চান তবে আপনি এটি করতে পারেন:

bin/Debug/*
bin/Release/*

বিশেষ দ্রষ্টব্য। binডিরেক্টরি যদি আপনার প্রকল্পের মূলের (.gitignore ফাইলের পাশাপাশি) না থাকে তবে উদাহরণস্বরূপ পরিবর্তে। bin/*/*আপনার প্রয়োজন হতে পারেpath/to/bin/*/*

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.