اگر فایل رمز (مثل .env) یکبار git add شود، حتی بعد از حذف از پوشه در تاریخچه میماند. این فصل میگوید چه چیزی را از اول وارد Git نکنی و فایل بزرگ را کجا بگذاری.
🎯 اهداف یادگیری
.gitignoreمؤثر بنویسی و الگوی negating را بفهمی- فایل trackشده را بعداً ignore کنی
- Git LFS را برای باینری بزرگ راه بیندازی
.gitattributesرا برای eol و diff تنظیم کنی
🚫 gitignore — الگوها
# وابستگی node_modules/ .venv/ dist/ coverage/ # راز .env .env.* !.env.example # سیستم .DS_Store Thumbs.db # ادیتور — اختیاری: بعضی تیمها .vscode را commit میکنند .idea/
اولویت: الگوی محلی فایل → پوشهٔ والد → ریشه → .git/info/exclude → core.excludesFile جهانی.
git check-ignore -v src/.env # کدام قانون خورد؟ git rm --cached secrets.json # از Index بردار، فایل روی دیسک بماند
اگر قبلاً add شده، باید git rm --cached کنی. فقط نوشتن در gitignore کافی نیست.
در VS Code فایلهای ignoreشده در Explorer کمرنگاند. Source Control آنها را نشان نمیدهد مگر Show Ignored.
🌍 قالب جهانی
git config --global core.excludesFile ~/.gitignore_global echo ".DS_Store" >> ~/.gitignore_global
📦 Git LFS — باینری را در تاریخچه خفه نکن
PDF، مدل سهبعدی، وزن شبکهٔ عصبی و فیلم با هر ویرایش کل blob را تکرار میکنند.
git lfs install git lfs track "*.pdf" git lfs track "*.psd" git add .gitattributes git add docs/book.pdf git commit -m "chore: store pdf in LFS" git lfs ls-files
روی GitHub فضای LFS جداگانه دارد (سهمیه). برای کتاب و بازی رایج است؛ برای کد منبع لازم نیست.
🧩 gitattributes
* text=auto eol=lf *.sh text eol=lf *.bat text eol=crlf *.png binary *.pdf filter=lfs diff=lfs merge=lfs -text package-lock.json merge=binary # جلوگیری از merge درهم JSON قفل
eol=lf جنگ CRLF ویندوز/لینوکس را در تیمهای چندسیستمی میکشد. در VS Code "files.eol": "\n".
فایل .gitattributes با linguist-vendored میتواند آمار زبان مخزن را درست کند — مفید برای monorepo.
Junior — node_modules را commit کنیم؟ هرگز. قفل (package-lock) را بله، پوشه را خیر.
Mid — تفاوت exclude و gitignore؟ info/exclude شخصی و غیرقابلپوش است؛ gitignore تیمی است.
Senior — LFS pointer چیست؟ فایل متنی کوچک با OID و اندازه که بهجای باینری در Git ذخیره میشود؛ محتوا روی LFS store است.
✅ چکلیست فهم
.envدر تاریخچه نیستcheck-ignore -vرا بلدی- برای PDF از LFS استفاده میکنی
- eol تیم یکسان است
فصل بعد: Source Control در VS Code از صفر — میانبر Ctrl+Shift+G، با عکس نزدیک.