সম্প্রতি একটি প্রজেক্টে কাজ করতে গিয়ে এক মজার (এবং বেশ মাথা ব্যথার!) অভিজ্ঞতার মুখোমুখি হয়েছিলাম। প্রজেক্টে একটা public/ ফোল্ডার ছিল, যার ভেতরের ভারী ফাইলগুলো আমি কোনোভাবেই গিটে পুশ করতে চাচ্ছিলাম না স্বাভাবিকভাবেই আমি .gitignore ফাইলে public/ লিখে দিলাম। কিন্তু অবাক করার বিষয়—গিট তারপরও সেই ফোল্ডারের ফাইলগুলোকে ট্র্যাক করেই যাচ্ছিল!নিয়ম অনুযায়ী সব করার পরেও .gitignore কাজ করছে না দেখে কিছুক্ষণ মাথায় হাত দিয়ে বসে ছিলামপরে যখন গিটের ব্যাকএন্ড লজিকটা বুঝলাম, তখন আসল রহস্য উন্মোচিত হলো!
🎯 আসল কথা: .gitignore কেবল UNTRACKED ফাইলের ওপর কাজ করে অনেকেই মনে করেন .gitignore হয়তো কোনো জাদুকরী দেয়াল যা ফাইল হাইড বা ডিলিট করে দেয়। কিন্তু আসল সত্যি হলো: যদি কোনো ফাইল বা ফোল্ডার আগেই আপনার স্টেজিং এরিয়া (.git/index) বা রিপোজিটরিতে চলে যায়, তবে গিট .gitignore-এর নিয়ম পুরোপুরি স্কিপ গিট সবসময় .gitignore-এর চেয়ে Index-কে বেশি প্রাধান্য দেয় আমার public/ ফোল্ডারের ফাইলগুলোও আগেই কোনো না কোনোভাবে ট্র্যাক হয়ে গিয়েছিল💡 দুটো সিনারিও দিয়ে বিষয়টি আরেকটু স্পষ্ট করি ১. ট্র্যাকিংয়ের ফাঁদ ("Already Tracked" Trap)আপনি একটি ফাইল তৈরি করলেন: secret.txt কমান্ড দিলেন: git add secret.txt (ফাইলটি এখন Index বা স্টেজিং এরিয়ায় চলে গেল)।এরপর আপনি ফাইলটি .gitignore-এ যুক্ত করলেন। ফলাফল: গিট ফাইলটি ট্র্যাক করতেই থাকবে এবং দেখাবে "Changes to be committed"। কারণ: গিট যখন ফাইলটি দেখে, সে শুরুতেই চেক করে Index। সে দেখে— "ফাইলটি তো আগেই Index-এ আছে! তারমানে আমি এটি ট্র্যাক করছি, তাই .gitignore দেখার কোনো দরকার নেই।"
২. সঠিক পদ্ধতি (The Untracked Flow) আপনি secret.txt তৈরি করলেন (এটি এখনো Untracked)। শুরুতেই ফাইলটিকে .gitignore-এ যুক্ত করলেন। ফলাফল: গিট ফাইলটিকে সম্পূর্ণ ইগনোর করবে এবং git status-এ দেখাবেই না! 🛠️ আমার সমস্যার সমাধান যেভাবে করেছিলাম (--cached ফ্ল্যাগ) পিসির ফোল্ডার বা লোকাল ফাইল না মুছে, কেবল গিটের মেমোরি থেকে ফোল্ডার বা ফাইলের ট্র্যাকিং সরানোর উপায় হলো --cached ফ্ল্যাগ ব্যবহার করা:
১. ফাইল বা ফোল্ডারটি .gitignore-এ যোগ করুন (যেমন: public/) echo "public/" >> .gitignore ২. পিসির আসল ফোল্ডার না মুছে কেবল গিটের স্টেজিং/ইন্ডেক্স থেকে রিমুভ করুন git rm -r --cached public/ এবং .git/index চেক করার উপায় পিসির আসল লোকাল ফোল্ডার ঠিক রেখে কেবল গিটের মেমোরি/ইনডেক্স থেকে ট্র্যাকিং সরানোর উপায় হলো --cached ফ্ল্যাগ ব্যবহার করা। বিষয়টি প্র্যাকটিক্যালি দেখতে আপনি গিট কমান্ডের মাধ্যমে .git/index-এর ভেতরটা চেক করতে পারেন
১. কমান্ড চালানোর আগে Index-এ public/ ফোল্ডারটি আছে কিনা চেক করুন git ls-files --stage public/ (এখানে Index-এ থাকা public/-এর ফাইলগুলোর লিস্ট দেখাবে)
২. ফাইল .gitignore-এ যোগ করে কেবল গিটের Index থেকে রিমুভ করুন echo "public/" >> .gitignore git rm -r --cached public/
৩. এবার আবার Index চেক করুন git ls-files --stage public/
(আউটপুট পুরো খালি! অর্থাৎ .git/index থেকে এটি মুছে গেছে)
#Git #GitTips #GitUnderTheHood #VersionControl #DotGitignore #GitIndex #SoftwareEngineering #DevCommunity #GitTroubleshooting