আমরা সবাই জানি যে Terminal-এ git init টাইপ করলে একটি লোকাল রিপোজিটরি তৈরি (initialize) হয়। কিন্তু কখনও ভেবে দেখেছেন, পর্দার আড়ালে আসলে ঠিক কী ঘটছে?
git init দেওয়ার সাথে সাথে Git আপনার প্রজেক্টে একটি হিডেন .git ফোল্ডার তৈরি করে। আপনি যদি ls -la দিয়ে ভেতরে উঁকি দেন, তবে দেখবেন এটি কোনো সাধারণ ফাঁকা ফোল্ডার নয়—বরং বেশ Organized একটি ডাটাবেস structure!
এর ভেতরে প্রধানত থাকে: 📁 objects/ — আপনার ফাইলের কনটেন্ট ও কমিট ডাটা সংরক্ষণ করে
📁 refs/ — ব্রাঞ্চ এবং ট্যাগের নির্দেশক (pointer) হিসেবে কাজ করে
📄 HEAD — আপনি বর্তমানে কোন ব্রাঞ্চে আছেন তা পয়েন্ট করে
⚙️ config — এই প্রজেক্টের নির্দিষ্ট Git সেটিংস ধরে রাখে
...এছাড়াও hooks/, info/-এর মতো আরও কিছু দরকারি ফোল্ডার থাকে।
💡 কিন্তু এখানে একটি বড় ভুল ধারণা আছে!
অনেকেই ভাবেন git init দেওয়া মানেই বোধহয় Git আপনার প্রজেক্টের ফাইলগুলোর ওপর নজর রাখা (tracking) শুরু করে দিয়েছে।
উত্তর হচ্ছে: একদমই না!
git init শুধু খালি ডাটাবেস আর তার স্ট্রাকচারটুকু বানিয়ে বসে থাকে। যতক্ষণ না আপনি ফাইল যোগ করছেন, সে নিজ থেকে কিচ্ছু ট্র্যাক করে না।
ফাইল ট্র্যাক করা শুরু করতে আপনাকে git add <filename> অথবা সব ফাইলের জন্য git add . ব্যবহার করতে হয়। এই কমান্ডটি আপনার ফাইলগুলোকে Working Directory থেকে Staging Area (যাকে Git-এর ভাষায় Index-ও বলা হয়)-তে নিয়ে যায় এবং objects/ ফোল্ডারে তাদের স্ন্যাপশট জমা করে।
🧐 এখান থেকেই আসল প্রশ্নটি ওঠে...
যদি কোনো ফাইল কেবল আপনার Working Directory-তে এমনিই পড়ে থাকে (এখনও git add করা হয়নি), তবে git status টাইপ করা মাত্রই Git কীভাবে বুঝে ফেলে যে ফাইলটি Untracked?
Git কীভাবে এত দ্রুত Working Directory, Staging Area আর আপনার লাস্ট কমিটের মধ্যে তুলনাটা করে?
আমরা ঠিক এই বিষয়টি নিয়েই বিস্তারিত কথা বলব পরবর্তী পর্বে!