শিরোনামই সবকিছু বলছে। .gitignore ফাইল প্রত্যাশা অনুযায়ী কাজ না করার অনেক কারণ হতে পারে।
.gitignore ফাইল Git রিপোজিটরিতে অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। যদি আপনার .gitignore ফাইল কাজ না করে, তবে আপনি ভুলে যেতে পারেন যেসব পরিবর্তন প্রাইভেট রাখা উচিত সেগুলো ট্র্যাক করছেন। এই পরিবর্তনগুলোর মধ্যে সংবেদনশীল তথ্য থাকতে পারে, যেমন API কী।
.gitignore ফাইল ভাঙতে দুটি প্রধান কারণ:
- ফাইল কমিট করার পর .gitignore-এ যোগ করা।
- .gitignore ফাইলে ভুল ফাইল নাম বা পথ রেফার করা।
এই টিউটোরিয়ালে আমরা এই দুটি সমস্যাটি এবং তাদের সমাধান নিয়ে আলোচনা করব।
.gitignore ফাইল কী?
.gitignore ফাইলটি সেই সব ফাইলগুলির তালিকা ধারণ করে जिन्हें আপনি আপনার Git রিপোজিটরিতে সংরক্ষণ করতে চান না। এই ফাইলটি সাধারণত কনফিগারেশন এবং এনভায়রনমেন্ট ফাইলগুলো রিপোজিটরির বাইরে রাখতে ব্যবহৃত হয়। এই ফাইলগুলো প্রায়শই প্রাইভেট তথ্য ধারণ করে এবং যেকোনো রিমোট রিপোজিটরিতে থাকা উচিত নয়।
এই ফাইলটি স্পষ্টভাবে .gitignore নামে সংরক্ষণ করতে হবে। এই প্লেইন টেক্সট ফাইলে, আপনি যেসব ফাইল বা ডিরেক্টরি Git-এর দ্বারা ট্র্যাক না করাও চান তাদের পথ যোগ করবেন। .gitignore-এ যা যোগ করা হবে Git সেগুলো উপেক্ষা করবে এবং তার ট্র্যাকিং ট্রি-এ যোগ করবে না।
.gitignore ফাইলের উদাহরণ কন্টেন্ট:
node_modules/ .env
এই ফাইলে আমরা মূলত Git কে একটি নির্দিষ্ট ফাইল উপেক্ষা করতে বলছি। এটি হলো .env ফাইল, যেটি প্রায়শই API কী ধারণ করে। আমরা node_modules ফোল্ডারটিও উপেক্ষা করছি যেটি সব ইনস্টল করা NPM প্যাকেজ ধারণ করে।
সাধারণ উপেক্ষা করা ফাইলগুলো হলো .DS_Store ফাইল, .env ফাইল, এবং কনফিগ ফাইল। .DS_Store ফাইলগুলো সাধারণত macOS অপারেটিং সিস্টেমে পাওয়া যায় এবং Git রিপোজিটরির অংশ হতে হয় না।
.gitignore ফাইলগুলো অধিকাংশ ক্ষেত্রে রিপোজিটরির রুট ডিরেক্টরিতে রাখা হয়। .gitignore ফাইল সম্পর্কে আরও জানতে আমাদের বেসিক গাইড দেখুন।
পরিস্থিতি ক: কমিট করার পর ফাইল .gitignore-এ যোগ করা
আমরা ভুলে একটি ফাইল কমিট করেছি যা উপেক্ষা করা উচিত ছিল। পরে সেটি .gitignore-এ যোগ করলেও Git সেটি ট্র্যাক করছে বলে মনে হয়।
কারণ হলো ফাইল/ফোল্ডারগুলো কমিট করার পূর্বে .gitignore-এ যোগ করতে হয়। Git ইতিমধ্যে সেগুলো ট্র্যাক করছে, তাই সেগুলো আবার আনট্র্যাক করতে নিচের কমান্ডটি চালাতে হবে:
git rm -rf --cached <path>
প্রথম অংশ git rm <path> সরিয়ে দেয়। --cached ফ্ল্যাগ নির্দেশ করে যে এটি শুধু ইনডেক্স থেকে সরানো হবে, লোকাল ডিরেক্টরিতে থাকবে। r ডিরেক্টরি পথ দেওয়া হলে রিকার্সিভ রিমুভাল এবং f ফোর্স করে। যদি শুধু একটি ফাইল থাকে এবং লোকালে রাখতে চান:
git rm --cached <file>
এইভাবে আপনি Git কে বলছেন যে আপনি আর সেই ফাইল/ফোল্ডার ট্র্যাক করতে চান না। এখন আবার চেষ্টা করুন, আপনার gitignore সঠিকভাবে কাজ করবে। মনে রাখবেন ফাইল/ফোল্ডারটি .gitignore-এ স্পষ্টভাবে উল্লেখ করা থাকতে হবে!
পরিস্থিতি খ: কমিটের আগে .gitignore তৈরি করা হলেও ফাইল ট্র্যাক হচ্ছে
যদি .gitignore তৈরি করা থাকা সত্ত্বেও ফাইল ট্র্যাক হয়, তবে সমাধান হতে পারে আপনি সঠিক ফাইল রেফার করছেন কিনা তা চেক করা। আপনাকে সঠিকভাবে নির্দিষ্ট করতে হবে কোন ফাইলগুলো .gitignore করবে। যেকোনো স্পেলিং ভুল বা ভুল পথ নাম আপনাকে ম্যানুয়ালি ফিক্স করতে হবে।
উদাহরণ বিবেচনা করুন:
*.pyyc
.gitignore ফাইলটি Git কে বলে দিচ্ছে কোন ফাইলগুলো উপেক্ষা করবে, এখানে সেটি হলো সব .pyyc ফাইল। কিন্তু আমাদের উদ্দেশ্য ছিল .pyc ফাইলগুলো উপেক্ষা করা। .pyc ফাইলগুলো পাইথন প্রোগ্রামের কনফিগারেশন ফাইল। আমাদের .gitignore ফাইলটি এটা জানা নাই, তাই আমাদের রুল ফিক্স করতে হবে:
*.pyc
এখন আমাদের রিপোজিটরি সব .pyc ফাইল উপেক্ষা করবে।
এছাড়া চেক করুন যে ফাইল/ফোল্ডার ডিক্লেয়ারেশনের শুরুতে বা শেষে কোনো ট্রেইলিং স্পেস আছে কিনা।
উপসংহার
আমরা gitignore কাজ না করার বেশ কিছু পরিস্থিতি এবং তাদের সমাধান নিয়ে আলোচনা করেছি। মূল শিক্ষা হলো আপনাকে বুঝতে হবে ফাইল/ডিরেক্টরিগুলো কোথায় অবস্থিত যাতে সঠিক পথ যোগ করতে পারেন।
আপনাকে সচেতন থাকতে হবে যে যেসব ফাইল উপেক্ষা করা দরকার সেগুলো তৈরি होते সাথে সাথে যোগ করুন। যদি ভুলে কমিট হয়ে যায়, তবে সৌভাগ্য껏 আমাদের কাছে git rm -rf --cached <path> কমান্ড আছে। এই কমান্ড ফাইলটি Git ওয়ার্কফ্লো থেকে বাদ দেবে। তারপর আপনি সেটি gitignore-এ যোগ করে ফাইলটি উপেক্ষা করতে পারবেন।
শেষ নোট: অন্য কিছু কেসে git reset উপকারী হতে পারে। আমি git reset নিয়ে একটি আর্টিকেল লিখেছি যা এই কেসগুলোর জন্য উপকারী হবে। Git reset মানে হলো আনডゥ করা, অতীতে ফিরে যাওয়া, কিছু কেসে আপনি ঠিক সেটিই চান।
Git সম্পর্কে আরও জানতে চান? আমাদের How to Learn Git গাইড পড়ুন। এই গাইডে আপনি Git শিখতে এক্সপার্ট পরামর্শ এবং শীর্ষ লার্নিং রিসোর্স পাবেন।