Future ForgeFuture ForgeFuture ForgeFuture Forge
ServicesWorkPackagesFree toolsNotesAboutContact
Start
  1. Home
  2. /Notes
Future ForgeFuture Forge

Product engineering studio — design, build, and deploy software.

Discuss your project

Contact

hello@futureforge.ir09128464105
Future ForgeFuture Forge

Product engineering studio — design, build, and deploy software.

Services

Product engineeringFull-stack engineeringEngineering auditArchitecture consultingInfrastructure and deploymentAI in the product

Explore

WorkNotesFAQPackages

Free tools

Engineering auditArchitecture advisorProject estimatorPrompt tool

Company

AboutContactPrivacyTerms of use

Discuss your project

Describe the problem and the constraints. If there is a fit, we will schedule a conversation.

Discuss your project

Contact

hello@futureforge.ir09128464105
GitHubLinkedIn

© 2026 FutureForge. All rights reserved.

HomeServicesFree toolsStart
Glossary

.gitignore چیست و چرا مهم است؟

تعریف .gitignore طبق مستندات GitHub، تفاوت ignore سراسری و exclude محلی، نحوهٔ Untrack کردن فایل قبلی، و پیوند با امنیت Secret.

SE
Soheil Ebrahimpour

Founder & product engineer

·Sep 20, 2026·7 min read
.gitignore چیستgitignoregit rm --cached.envignore patternsgithub/gitignore
الگوهای gitignore و برچسب Ignore Noise

هر پروژه فایل‌هایی می‌سازد که نباید وارد تاریخچهٔ Git شوند: خروجی Build، وابستگی‌های دانلودشده، کش IDE، و مهم‌تر از همه فایل‌های حاوی Secret مثل .env. اگر این‌ها Commit شوند، مخزن شلوغ، کند، و گاهی خطرناک می‌شود.

.gitignore فایلی است که به Git می‌گوید کدام مسیرها را هنگام Commit نادیده بگیرد. طبق مستندات GitHub، با ساختن .gitignore در ریشهٔ مخزن مشخص می‌کنید چه فایل‌ها و پوشه‌هایی نباید Check-in شوند. برای اینکه قانون با بقیهٔ تیم به اشتراک گذاشته شود، خودِ .gitignore را Commit کنید.

این مقاله تعریف، سطوح مختلف Ignore، اشتباه Untrack، نمونه‌های رایج، و پیوند امنیتی با نشت Secret را پوشش می‌دهد.

وایت‌برد Tracked در برابر Ignored

پاسخ کوتاه

.gitignore فهرست الگوهایی است که Git از Stage و Commit کردن آن‌ها صرف‌نظر می‌کند. برای فایل‌های محلی همه‌مخزنی می‌توانید Ignore سراسری کاربر را تنظیم کنید؛ برای استثناهای شخصی بدون اشتراک با تیم از .git/info/exclude استفاده کنید. اگر فایلی قبلاً Track شده، اضافه کردن نامش به gitignore کافی نیست — باید با git rm --cached از ایندکس خارج شود.

اهمیت امنیتی: بسیاری از نشت‌های API Key با نبودن .env در gitignore شروع می‌شوند. GitHub در راهنمای حذف دادهٔ حساس صریحاً می‌گوید فایل‌هایی که نباید Track شوند را به .gitignore اضافه و آن تغییر را Push کنید تا دیگران هم محافظت شوند.

gitignore جلوی ساخته شدن فایل حساس را نمی‌گیرد؛ جلوی وارد شدن ندانستهٔ آن به تاریخچهٔ مشترک را می‌گیرد.

سه لایهٔ Ignore

لایهمسیر رایجبا تیم Share می‌شود؟
.gitignore مخزنریشه یا زیرپوشه‌های پروژهبله — باید Commit شود
exclude محلی.git/info/excludeخیر — فقط همین Clone
Ignore سراسری کاربرمثلاً ~/.config/git/ignoreخیر — همهٔ مخازن همان ماشین

طبق Docs: برای فایل‌های موقت ادیتور که فقط روی ماشین شما ساخته می‌شوند، لایهٔ سراسری یا exclude مناسب است. برای .env و خروجی Build که همه تولید می‌کنند، .gitignore مخزن درست است.

الگوها به زبان ساده

  • نام فایل دقیق: .env
  • پسوند: *.log یا *.pem
  • پوشه: node_modules/ یا dist/
  • استثنا با ! : مثلاً نادیده گرفتن .env.* ولی نگه داشتن .env.example

gitignore

# نمونهٔ آموزشی — پروژه را با قالب رسمی زبان خودتان کامل کنید .env .env.* !.env.example node_modules/ dist/ build/ *.log .DS_Store *.pem

GitHub مجموعهٔ قالب‌های توصیه‌شده را در مخزن عمومی github/gitignore نگه می‌دارد؛ همچنین می‌توان از ژنراتورهایی مثل gitignore.io برای ترکیب OS و زبان و IDE استفاده کرد. قالب نقطهٔ شروع است، نه جایگزینی فکر کردن دربارهٔ Secretهای خاص پروژه.

فایل از قبل Track شده چه می‌شود؟

این پرتکرارترین اشتباه است: .env را به gitignore اضافه می‌کنید ولی Git همچنان تغییراتش را نشان می‌دهد، چون قبلاً Track شده است. مستند رسمی می‌گوید باید ابتدا Untrack کنید:

bash

git rm --cached path/to/file

این دستور فایل را از دیسک محلی پاک نمی‌کند؛ فقط از ایندکس Git برمی‌دارد تا از این به بعد Ignore شود. سپس Commitی بسازید که حذف از مخزن را ثبت کند. اگر Secret داخل تاریخچه بوده، Untrack نوک شاخه کافی نیست — به Runbook مقالهٔ ۰۸۲ بروید.

چرا برای کیفیت و امنیت مهم است؟

  • جلوگیری از Commit تصادفی Secret و کلید.
  • کوچک ماندن Clone و سریع‌تر شدن CI.
  • کم شدن Conflict روی فایل‌های تولیدشدهٔ محلی.
  • تمیز ماندن Review: Reviewر کد را می‌بیند نه پوشهٔ وابستگی.
  • یکسان شدن تجربهٔ onboarding وقتی .env.example کنار gitignore باشد.

gitignore جایگزین Secret scanning نیست. کسی می‌تواند عمداً Force-add کند یا فایل را با نام دیگر Commit کند. لایه‌ها مکمل‌اند.

چک‌لیست برای مخزن جدید

  1. قالب زبان/فریمورک را از github/gitignore بردارید.
  2. .env و مشتقات را اضافه کنید؛ .env.example را استثنا کنید.
  3. خروجی Build، پوشش تست، و کش IDE را پوشش دهید.
  4. یک بار git status را با فایل‌های واقعی محلی آزمایش کنید.
  5. در README یک خط بنویسید: فایل‌های محلی لازم کدام‌اند و چگونه ساخته می‌شوند.
  6. اگر فایل حساسی قبلاً Commit شده، Untrack به علاوهٔ Rotate طبق ۰۸۲.

اشتباه‌های رایج

  • Commit نکردن خودِ .gitignore — هر نفر Ignore محلی متفاوت می‌سازد.
  • نادیده گرفتن کل پوشهٔ config در حالی که فایل‌های غیرحساس باید در Git باشند.
  • اعتماد به Ignore بعد از Track شدن بدون rm --cached.
  • گذاشتن Secret در فایلی با نام عجیب که در الگو نیست.
  • Ignore کردن قفل وابستگی بدون تصمیم تیمی — reproducability را می‌زند.

تفاوت با Branch و Permission

گاهی تیم به‌جای gitignore سعی می‌کند با Private کردن مخزن یا محدود کردن Push مشکل فایل‌های زائد را حل کند. آن‌ها مسئلهٔ دسترسی‌اند نه مسئلهٔ انتخاب فایل. gitignore تصمیم می‌گیرد چه چیزی اساساً بخشی از تاریخچهٔ منبع باشد. هر سه لایه‌اند: دیدپذیری مخزن، مجوز افراد، و Ignore فایل.

جمع‌بندی برای تصمیم

.gitignore قرارداد تیمی برای نگه‌داشتن زباله و Secret بیرون از Git است. لایهٔ مخزن را Commit کنید، فایل‌های از پیش Trackشده را Untrack کنید، و برای Secret به scanning و Rotate هم تکیه کنید. قالب‌های رسمی GitHub شروع خوب‌اند؛ فهرست Secretهای اختصاصی پروژه را خودتان کامل کنید.

اگر امروز یک کار می‌کنید: وضعیت .env را در git status و تاریخچه بررسی کنید.

الگوهای پیشرفته‌تر که ارزش دارند

نادیده گرفتن پوشه با اسلش پایانی معمولاً فقط دایرکتوری را هدف می‌گیرد. الگوهای Recursion و استثنا با علامت تعجب وقتی مفیدند که بخواهید یک فایل نمونه را نگه دارید و بقیه را حذف کنید. اگر الگو پیچیده شد، در کامنت بالای همان بخش gitignore یک خط توضیح چرایی بنویسید — خودِ فایل هم خوانده می‌شود.

gitignore در زیرپوشه‌ها می‌تواند قوانین محلی اضافه کند، ولی برای تیم کوچک معمولاً یک فایل ریشه کافی و قابل‌فهم‌تر است. پراکندگی قانون‌ها onboarding را سخت می‌کند.

وابستگی‌ها و خروجی Build

پوشه‌هایی مثل node_modules یا vendor را معمولاً Ignore می‌کنند و به قفل وابستگی و نصب در CI تکیه می‌کنند. خروجی Build مثل dist را هم مگر وقتی سیاست انتشار Artifact از Git باشد Ignore کنید. اشتباه رایج: Commit کردن باینری بزرگ که Clone را سنگین و Review را غیرممکن می‌کند.

فایل‌های سیستم‌عامل مثل DS_Store و کش IDE را یا در gitignore مخزن بگذارید یا در Ignore سراسری کاربر. اگر فقط روی ماشین شما ظاهر می‌شوند، سراسری تمیزتر است؛ اگر همه درگیرند، مخزن.

امنیت فراتر از env

  • کلیدهای SSH و فایل‌های pem و p12.
  • JSON حساب سرویس ابری.
  • داپ دیتابیس با دادهٔ واقعی.
  • خروجی ابزارهای تشخیص که ممکن است Secret را در متن گزارش بیاورند.

هر پروژه یک فهرست اختصاصی دارد. همان فهرست را در onboarding بخوانید.

gitignore و CI

CI باید همان قوانین را ببیند چون از مخزن می‌خواند. اگر چیزی لازم است در CI ساخته شود، در Workflow بسازید نه اینکه از لپ‌تاپ Commit شود. برای اطمینان، Pipeline را طوری بنویسید که بدون فایل‌های محلی Ignoreشده هم سبز شود.

چک بعد از Clone

همکار جدید بعد از Clone باید بتواند با README و env.example بالا بیاید بدون نیاز به کپی فایل‌های Ignoreشده از چت. اگر نمی‌تواند، یا مستند ناقص است یا شما به فایل‌های محلی مخفی وابسته شده‌اید — هر دو بوی بد طراحی می‌دهند.

جمع‌بندی عملی

gitignore را روز اول مخزن بسازید، قالب زبان را پایه بگیرید، Secretها را صریح اضافه کنید، فایل‌های Trackشده را Untrack کنید، و اسکن را فراموش نکنید. این کار کسل‌کننده است و دقیقاً به همین دلیل جلوِ حوادث کسل‌کنندهٔ نیمه‌شب را می‌گیرد.

منابع و مراجع

  • GitHub Docs — Ignoring files — https://docs.github.com/en/get-started/git-basics/ignoring-files
  • GitHub — github/gitignore templates — https://github.com/github/gitignore
  • GitHub Docs — Removing sensitive data from a repository — https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository

پس از بستن gitignore، نوشتن README واضح onboarding را کامل می‌کند.

Author

SE

Soheil Ebrahimpour is the founder of FutureForge. He works on product design, architecture, and getting custom software into production.

Related notes

Related notes

Categories

Related services

From note to project

If this topic is close to your product or system, we can talk about the real scope.

If you are unsure about architecture or the build path, we can talk about the project.

Describe the problem and the constraints. If there is a fit, we will schedule a conversation.

Soheil Ebrahimpour
Notes
Monolith در برابر Microservices: کدام را انتخاب کنیم؟
Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه
Empty State، Error State و Loading State چیست؟
UX مهم‌تر است یا UI؟
چرا متن بد می‌تواند حتی یک UI زیبا را خراب کند؟

Software architecture

Monolith در برابر Microservices: کدام را انتخاب کنیم؟

Sep 20, 2026

Operations

Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه

Sep 20, 2026

Product engineering

Empty State، Error State و Loading State چیست؟

Sep 20, 2026

Product engineering

UX مهم‌تر است یا UI؟

Sep 20, 2026

Product engineering

چرا متن بد می‌تواند حتی یک UI زیبا را خراب کند؟

Sep 20, 2026
All notes219
Software architecture13
Glossary37
Operations87
Product engineering74
Web guide8
Product engineering
Full-stack engineering
Engineering audit
Architecture consulting
Infrastructure and deployment
Discuss your project
Free tools
Discuss your project