গিট উপেক্ষা করে ডিরেক্টরি এবং ডিরেক্টরি / * এর মধ্যে পার্থক্য কী?


108

গিটের ডিরেক্টরিতে থাকা সামগ্রীর বিষয়বস্তু উপেক্ষা করার সঠিক উপায়টি সম্পর্কে আমি বিভ্রান্ত।

ধরুন আমার নিম্নলিখিত ডিরেক্টরি কাঠামো রয়েছে:

my_project  
     |--www  
         |--1.txt  
         |--2.txt
     |--.gitignore

এটি রাখার মধ্যে পার্থক্য কী:

www

এবং এই?

www/*

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

www
!*.gitkeep

এটি কাজ করে না (আমার উদ্দেশ্য হল www এর অধীনে সমস্ত বিষয়বস্তু উপেক্ষা করা কিন্তু ডিরেক্টরিটি রাখা)। তবে আমি যদি নিম্নলিখিতটি চেষ্টা করি:

www/* 
!*.gitkeep

তাহলে কাজ করে! সুতরাং আমি মনে করি এটি দুটি পদ্ধতির মধ্যে অবশ্যই কিছু পার্থক্য থাকতে হবে।


binএবং এর মধ্যে একটি সহজ পার্থক্য bin/হ'ল প্রাক্তন ফাইল বা ফোল্ডারগুলি উপেক্ষা করবে, কেবলমাত্র পরবর্তী ফোল্ডারগুলি। আমি পার্থক্যটি জানি নাbin/*
কর্নেল প্যানিক

উত্তর:


203

সেখানে মধ্যে পার্থক্য করছি www, www/এবং www/*

মূলত ডকুমেন্টেশন এবং আমার নিজের পরীক্ষাগুলি থেকে, wwwকোনও ফাইল বা ডিরেক্টরিগুলির সাথে একটি মিল খুঁজে পাওয়া যায় www/কেবল একটি ডিরেক্টরিতে www/*মেলে , তবে ডিরেক্টরি ভিতরে এবং ডিরেক্টরিগুলির সাথে মেলে www

আমি শুধুমাত্র মধ্যে পার্থক্য উপর আলোচনা করব www/এবং www/*এখানে, যেহেতু মধ্যে পার্থক্য wwwএবং www/স্পষ্ট।

কারণ www/, গিট ডিরেক্টরিটি wwwনিজেই উপেক্ষা করে, যার অর্থ গিটটি এমনকি ভিতরে দেখতে পাবে না। তবে এর জন্য www/*, গিট ভিতরে সমস্ত ফাইল / ফোল্ডার চেক wwwকরে এবং প্যাটার্নের সাহায্যে সেগুলি সমস্ত উপেক্ষা করে *। এটি একই ফলাফলের দিকে নিয়ে যায় বলে গিটারের wwwসমস্ত শিশু ফাইল / ফোল্ডার উপেক্ষা করা গেলে গিট কোনও খালি ফোল্ডারটিকে ট্র্যাক করবে না । এবং প্রকৃতপক্ষে ফলাফলগুলি ওপির ক্ষেত্রে www/বা www/*স্বতন্ত্র ক্ষেত্রে কোনও পার্থক্য হবে না । তবে এটি অন্যান্য নিয়মের সাথে একত্রিত হলে এটি তফাত্ করবে।

উদাহরণস্বরূপ, যদি আমরা কেবলমাত্র অন্তর্ভুক্ত করতে চান www/1.txtতবে ভিতরে থাকা সমস্ত লোককে উপেক্ষা করতে চান www?

নিম্নলিখিতগুলি .gitignoreকাজ করবে না।

www/
!www/1.txt

নিম্নলিখিত .gitignoreকাজ করে, কেন?

www/*
!www/1.txt

প্রাক্তনদের জন্য, গিটটি কেবল ডিরেক্টরিটিকে উপেক্ষা করে wwwএবং www/1.txtআবার অন্তর্ভুক্ত করার জন্য এমনকি ভিতরেও তাকাবে না । প্রথম নিয়মটি মূল ডিরেক্টরিটি বাদ দেয় wwwতবে তা নয় www/1.txtএবং ফলস্বরূপ www/1.txt" আবার অন্তর্ভুক্ত করা যায় না "।

তবে পরবর্তীকালের জন্য গিট প্রথমে সমস্ত ফাইল / ফোলারগুলিকে উপেক্ষা করে wwwএবং তারপরে আবার একটিতে অন্তর্ভুক্ত করে যা এটি www/1.txt

এই উদাহরণস্বরূপ, ডকুমেন্টেশনের ফলোলিং লাইনগুলি সহায়তা করতে পারে:

একটি alচ্ছিক উপসর্গ "!" যা প্যাটার্ন অবহেলা করে; আগের প্যাটার্ন দ্বারা বাদ দেওয়া কোনও মিলে যাওয়া ফাইল আবার অন্তর্ভুক্ত হবে। যদি সেই ফাইলটির কোনও পিতামহিত ডিরেক্টরি বাদ দেওয়া হয় তবে কোনও ফাইল পুনরায় অন্তর্ভুক্ত করা সম্ভব নয়।


আপনি কি ভাবেন না www/1.txtএবং তারপরে www/দ্বিতীয় পদ্ধতির মতোই
হ'ল

8

আমি কেবল ডকুমেন্টেশনের মাধ্যমে পার্স করছি এবং যতদূর আমি বলতে পারি সেগুলি কেবল আরও উন্নত নিদর্শনগুলির মধ্যে পৃথক, যেমন

$ cat .gitignore
    # exclude everything except directory foo/bar
    /*
    !/foo
    /foo/*
    !/foo/bar

আমি উপরেরটি পরীক্ষা করেছিলাম এবং আপনি যদি এটির !/fooসাথে প্রতিস্থাপন করেন তবে আপনি !/foo/*অবশ্যই আলাদা ফলাফল পাবেন get

বিঃদ্রঃ

foo

কোনও ফাইল বাদ দেবে foo, কিন্তু

foo/

কেবল foo নামের ডিরেক্টরি বাদ দেবে।


3

আপনি ইতিমধ্যে পেয়েছেন নিখুঁত ভাল উত্তর ছাড়াও, আপনি নোট করা উচিত যে .gitignoreআপনার প্রকল্পে সাবফোল্ডার সহ যে কোনও জায়গায় থাকতে পারে ।

সুতরাং আপনি যদি সমস্ত ফাইল ভিতরে থাকা উপেক্ষা করতে চান wwwতবে ফোল্ডারটি wwwখালি .gitkeep, .dummyবা আপনি যে নামটি বেছে নেওয়ার পরিবর্তে সংস্করণিত করতে চান, কেন .gitignoreসেখানে একটি ফাইল ব্যবহার করবেন না, সমস্ত ফাইল উপেক্ষা করতে বলছেন?

/
|- .gitignore   (a)
\- www
    |- .gitignore   (b)
    |- 1.jpg
    \- 2.jpg

মূলটিতে .gitignore(ক) আপনি wwwফোল্ডার বা এর বিষয়বস্তু সম্পর্কে কিছু বলতে পারবেন না ।

ইন www/.gitignore(খ) আপনাকে নিম্নলিখিত করা:

# ignore all files in this folder except this .gitignore
*
!.gitignore

এইভাবে সবকিছু আরও সুসংহত দেখায় (আমার কাছে কমপক্ষে)।


1

ডটফায়ালস ব্যতীত ডিরেক্টরিতে সমস্ত কিছু উপেক্ষা করার জন্য আপনি নীচের গ্লোব-প্যাটার্নটি আপনার ব্যবহার করতে পারেন .gitignore:

www/[^.]*

সুতরাং অতিরিক্ত প্রয়োজন নেই .gitignore, কেবল .keepআপনার wwwডিরেক্টরিতে একটি ফাইল যুক্ত করুন ।

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