.gitignore কী এবং আগে থেকে ট্র্যাক করা ফাইলের ক্ষেত্রে কী হয়?

.gitignore কী?

.gitignore হলো একটি বিশেষ টেক্সট ফাইল যেখানে আপনি বলে দেন কোন কোন ফাইল বা ফোল্ডার Git ট্র্যাক করবে না। এই ফাইলে উল্লেখিত pattern-এর সাথে মিলে যাওয়া ফাইলগুলো git status-এ untracked হিসেবে দেখাবে না এবং git add . চালালেও stage হবে না।

সাধারণত যেসব জিনিস ignore করা হয়:

# Build output
target/
*.class

# IDE ফাইল
.idea/
*.iml

# সংবেদনশীল তথ্য
.env
application-local.properties

# Log ও temporary ফাইল
*.log

কেন প্রয়োজন: build artifact (যেমন target/ ফোল্ডার), IDE-র ব্যক্তিগত সেটিংস, log ফাইল, এবং সবচেয়ে গুরুত্বপূর্ণ — সংবেদনশীল তথ্য (API key, password, .env ফাইল) যেন ভুলেও রিপোজিটরিতে না ঢুকে যায়।

সবচেয়ে গুরুত্বপূর্ণ বিষয়: আগে থেকে ট্র্যাক করা ফাইলের ক্ষেত্রে .gitignore কাজ করে না!

এটাই এই প্রশ্নের মূল ফাঁদ (trick)। .gitignore শুধু untracked ফাইলের জন্য কার্যকর।

যদি কোনো ফাইল ইতিমধ্যে Git ট্র্যাক করছে (অর্থাৎ আগে কখনো commit হয়ে গেছে), তারপর আপনি সেটি .gitignore-এ যোগ করেন — কিছুই হবে না। Git আগের মতোই ফাইলটির পরিবর্তন ট্র্যাক করতে থাকবে, git status-এ modified দেখাবে, এবং commit-ও হবে।

কারণ: .gitignore Git-কে বলে "নতুন করে এই ফাইল ট্র্যাক করা শুরু কোরো না।" কিন্তু যে ফাইল ইতিমধ্যে Git-এর index-এ (staging area-র রেকর্ডে) আছে, তার উপর .gitignore-এর কোনো প্রভাব নেই।

কীভাবে untrack করবেন?

সমাধান হলো ফাইলটিকে Git-এর index থেকে সরানো, কিন্তু ডিস্ক থেকে না মুছে। এজন্য ব্যবহার করা হয় --cached ফ্ল্যাগ:

# একটি ফাইল untrack করা (ডিস্কে ফাইল থেকে যাবে)
git rm --cached application-local.properties

# পুরো ফোল্ডার untrack করা
git rm -r --cached target/

# এরপর commit করতে হবে
git commit -m "Stop tracking local config file"

এখন থেকে:

  • ফাইলটি আপনার ডিস্কে অক্ষত থাকবে
  • Git আর এটির পরিবর্তন ট্র্যাক করবে না
  • .gitignore-এ থাকায় ভবিষ্যতেও আর stage হবে না

সতর্কতা: --cached ছাড়া শুধু git rm চালালে ফাইলটি ডিস্ক থেকেও মুছে যাবে — এটি একটি সাধারণ ভুল।

আরেকটি গুরুত্বপূর্ণ সতর্কতা: History থেকে মুছে যায় না

git rm --cached চালালে ফাইলটি শুধু ভবিষ্যতের commit থেকে বাদ যায়। কিন্তু আগের commit-গুলোর history-তে ফাইলটি রয়ে যায়।

অর্থাৎ, যদি ভুলে কোনো API key বা password commit হয়ে গিয়ে থাকে, শুধু untrack করলেই হবে না — যে কেউ পুরনো commit ঘেঁটে সেটি বের করতে পারবে। সেক্ষেত্রে করণীয়:

  1. সাথে সাথে credential-টি rotate/revoke করুন (এটাই সবচেয়ে জরুরি ধাপ)
  2. প্রয়োজনে git filter-repo বা BFG Repo-Cleaner দিয়ে পুরো history থেকে ফাইলটি মুছতে হবে (এটি ইন্টারভিউ তালিকার ৩০ নম্বর প্রশ্নের বিষয়)
Share