একটা project folder-এর প্রতিটা file Git-এ থাকার যোগ্য না — installed dependency, build output, আর secret কখনো track করা উচিত না। একটা .gitignore file Git-কে বলে কোন file বা folder সম্পূর্ণভাবে ignore করতে হবে।
# .gitignore
node_modules/
.env
*.log
dist/
.DS_Store| Pattern | যা match করে |
|---|---|
| node_modules/ | project-এর যেকোনো জায়গায়, একটা নির্দিষ্ট folder |
| *.log | .log-এ শেষ হওয়া প্রতিটা file |
| .env | একটা নির্দিষ্ট filename |
| /build | শুধু project root-এ একটা build folder, গভীরে nested একটা না |
| !important.log | একটা exception — উপরের একটা pattern-এ মিলে যেত এমন একটা নির্দিষ্ট file un-ignore করে |
| Category | উদাহরণ |
|---|---|
| Dependency | node_modules/, vendor/ — এর বদলে package.json/composer.json থেকে পুনরায় install করা |
| Secret | .env — environment variable-এর আগের PHP/Node lesson থেকে |
| Build output | dist/, build/ — source থেকে regenerate করা, নিজে source না |
| Editor/OS file | .DS_Store, .vscode/, Thumbs.db |
| Log ও cache | *.log, .cache/ |
.gitignore-এ একটা pattern যোগ করা শুধু Git ইতিমধ্যে জানে না এমন file-কে প্রভাবিত করে — ইতিমধ্যে commit করা একটা file স্পষ্টভাবে সরানো না হওয়া পর্যন্ত track হতে থাকে।
# একটা file track করা বন্ধ করুন, কিন্তু disk-এ রাখুন
git rm --cached .env
git commit -m "Stop tracking .env"একটা leak হওয়া secret শুধু ignore না, rotate করা দরকার
একটা secret (একটা API key, একটা password) কখনো commit হয়ে থাকলে, পরে এটা .gitignore-এ যোগ করা history থেকে এটা সরায় না — এটা এখনো যেকোনো আগের commit থেকে recoverable। expose হওয়া secret অবিলম্বে rotate করাই আসল fix; এটা history থেকে সম্পূর্ণ সরানো একটা আলাদা, বেশি advanced operation।