প্রশ্নের দুটি উদাহরণই আসলে খুব খারাপ উদাহরণ যা ডেটা ক্ষতি হতে পারে!
আমার পরামর্শ: /*
আপনার কোনও ভাল কারণ না থাকলে .gitignore ফাইলের ডিরেক্টরিগুলিতে কখনই সংযোজন করবেন না!
জেফ্রমি যা লিখেছিলেন তার একটি ভাল কারণ হ'ল: "যদি আপনি পরবর্তীতে ডিরেক্টরিতে কোনও কিছু উপেক্ষা করতে চান" ।
অন্যথায় এটি করা না হওয়ার কারণটি হ'ল /*
ডিরেক্টরিতে সংযোজন একদিকে যেমন কাজ করে এটি সঠিকভাবে ডিরেক্টরিতে সমস্ত বিষয়বস্তু উপেক্ষা করে তবে অন্যদিকে এর একটি বিপজ্জনক পার্শ্ব প্রতিক্রিয়া রয়েছে:
আপনি নির্বাহ git stash -u
(সাময়িকভাবে ট্র্যাক এবং untracked লুকোবার জায়গা ফাইলগুলিতে) অথবা git clean -df
(untracked মুছতে কিন্তু উপেক্ষিত ফাইল রাখার) আপনার সংগ্রহস্থলের মধ্যে, সমস্ত ডিরেক্টরি যে যোগ দিয়ে উপেক্ষা করা হয় /*
করা হবে অপরিবর্তনীয়ভাবে মোছা !
কিছু পটভূমি
আমাকে এই কঠিন উপায়ে শিখতে হয়েছিল। আমার দলের কেউ /*
আমাদের .gitignore এর কিছু ডিরেক্টরিতে সংযোজন করছিলেন। আমার বেশিরভাগ সময় উপলক্ষ্য হয়েছিল যেখানে নির্দিষ্ট ডিরেক্টরি হঠাৎ অদৃশ্য হয়ে যায়। আমাদের অ্যাপ্লিকেশন দ্বারা প্রয়োজনীয় স্থানীয় ডেটা গিগাবাইট সহ ডিরেক্টরি। কেউ এটি ব্যাখ্যা করতে পারেনি এবং আমি সবসময় সমস্ত ডেটা পুনরায় ডাউনলোড করতে টুপি করি। কিছুক্ষণ পরে আমি একটি ধারণা পেয়েছিলাম যে এটির সাথে এটি করতে পারে git stash
। একদিন আমি আমার স্থানীয় রেপো পরিষ্কার করতে চেয়েছিলাম (ফাইলগুলি উপেক্ষা করার সময়) এবং আমি ব্যবহার করছি git clean -df
এবং আবার আমার ডেটা চলে গেছে। এবার আমি যথেষ্ট ছিলাম এবং বিষয়টি তদন্ত করেছি। আমি অবশেষে বুঝতে পারি যে কারণটি যুক্ত হয়েছে /*
।
আমি অনুমান করি যে এটি কোনওভাবে এই ব্যাখ্যা দ্বারা ব্যাখ্যা করা যেতে পারে যে directory/*
ডিরেক্টরিটির সমস্ত বিষয়বস্তু উপেক্ষা করে তবে ডিরেক্টরিটি নিজেই নয়। সুতরাং জিনিসগুলি মুছে ফেলা হবে না এটিকে ট্র্যাক হিসাবে বিবেচনা করা হয় না বা উপেক্ষা করা হয় না। যদিও git status
এবং git status --ignored
এটিতে কিছুটা আলাদা ছবি দিন।
কিভাবে পুনরুত্পাদন
আচরণটি পুনরুত্পাদন করার উপায় এখানে। আমি বর্তমানে গিট ২.৮.৪ ব্যবহার করছি।
এতে localdata/
একটি ডামি ফাইলের সাথে ডাকা একটি ডিরেক্টরি important.dat
একটি স্থানীয় গিট রিপোজিটরিতে তৈরি /localdata/*
করা হবে এবং .gitignore
ফাইলটি রেখে বিষয়বস্তু উপেক্ষা করা হবে। উল্লিখিত দুটি গিট কমান্ডগুলির মধ্যে একটি এখন কার্যকর করা হলে ডিরেক্টরিটি (অপ্রত্যাশিতভাবে) হারিয়ে যাবে।
mkdir test
cd test
git init
echo "/localdata/*" >.gitignore
git add .gitignore
git commit -m "Add .gitignore."
mkdir localdata
echo "Important data" >localdata/important.dat
touch untracked-file
আপনি যদি git status --ignored
এখানে কিছু করেন তবে আপনি পাবেন:
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
untracked-file
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
localdata/
এখন হয় হয়
git stash -u
git stash pop
অথবা
git clean -df
উভয় ক্ষেত্রেই উপেক্ষা করা ডিরেক্টরি localdata
চলে যাবে বলে অভিযোগ !
এটিকে কোনও বাগ হিসাবে বিবেচনা করা যায় কিনা তা নিশ্চিত নন তবে আমার ধারণা এটি কমপক্ষে এমন একটি বৈশিষ্ট্য যার কারও প্রয়োজন নেই।
আমি এটি গিট বিকাশের তালিকায় জানাব এবং তারা এ সম্পর্কে কী ভাববে তা দেখতে পাবো।
.gitignore
ফাইল ও ডিরেক্টরিগুলি এটি উপেক্ষা করে পার্থক্য? উদাহরণস্বরূপ,data
বনামdata/
বিভিন্ন জিনিস মানে?