Git Ignore
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
Git Ignore
فایلی با نام .gitignore که در ریشه (Root) پروژه قرار میگیرد و به Git دستور میدهد تا فایلها یا پوشههای خاصی را نادیده بگیرد. این فایلها در تاریخچه Git ثبت نمیشوند و به مخزن راه دور (Remote Repository) ارسال نخواهند شد.
Wildcards
الگوهای متنی که برای اشاره به گروهی از فایلها به صورت دستهجمعی استفاده میشوند. به جای نوشتن نام تکتک فایلها، از کاراکترهای خاصی برای تعریف یک الگو استفاده میشود.
Asterisk (*)
یک نوع Wildcard که نماینده هر تعداد کاراکتر است. برای مثال، الگوی *.txt به تمامی فایلهایی که پسوند آنها .txt است اشاره میکند.
Question Mark (?)
یک نوع Wildcard که دقیقاً نماینده یک کاراکتر است. برای مثال، الگوی test?.log میتواند فایلهایی مانند test1.log یا testA.log را شامل شود.
Exclude File
فایلی در مسیر .git/info/exclude که مشابه .gitignore عمل میکند، با این تفاوت که تنظیمات آن فقط مخصوص سیستم خودِ توسعهدهنده است و برای سایر اعضای تیم ارسال نمیشود.
Untracked Files
فایلهایی در دایرکتوری پروژه که Git از وجود آنها آگاه است اما هنوز آنها را تحت نظر (Track) نگرفته است.
موارد مصاحبه ای
تفاوت اصلی .gitignore و فایل exclude چیست؟
فایل .gitignore معمولاً در پروژه Commit میشود و تمام اعضای تیم از آن استفاده میکنند تا فایلهای عمومی (مثل پوشه target یا تنظیمات IDE) نادیده گرفته شوند. اما فایل exclude در پوشه .git قرار دارد، به Remote ارسال نمیشود و برای فایلهای شخصی (مثل توکنهای خصوصی یا پسوردهای محلی) که فقط در سیستم شما هستند استفاده میشود.
چرا نباید پوشه target یا فایلهای کامپایل شده را به Git اضافه کرد؟
این فایلها حجیم هستند و به ازای هر بار Build تغییر میکنند. اضافه کردن آنها باعث شلوغ شدن بیهوده تاریخچه Git (Git History) میشود. همچنین این فایلها از روی کد منبع قابل تولید هستند و نیازی به ذخیرهسازی آنها در مخزن نیست.
اگر فایلی قبلاً توسط Git در حال Track شدن باشد، آیا اضافه کردن آن به .gitignore باعث حذف آن میشود؟
خیر. اگر Git قبلاً فایلی را شناسایی و Track کرده باشد، اضافه کردن نام آن به .gitignore تأثیری ندارد. برای متوقف کردن رهگیری آن، باید ابتدا با دستور git rm --cached آن را از محیط Stage خارج کنید.
Wildcards چه کاربردی در مدیریت فایلهای نادیده گرفته شده دارند؟
زمانی که تعداد فایلهای مشابه زیاد باشد (مثلاً صدها فایل Log)، نوشتن نام تکتک آنها غیرممکن است. با استفاده از الگوهایی مثل *.log میتوان تمام آن فایلها را با یک خط کد در .gitignore نادیده گرفت.
مثال کاربردی
فرض کنید در یک پروژه جاوا هستید و میخواهید فایلهای حساس و غیرضروری را مدیریت کنید:
۱. نادیده گرفتن دستهجمعی: برای اینکه تمامی فایلهای متنی پروژه در Git ثبت نشوند، در فایل .gitignore عبارت *.txt را قرار میدهید. با این کار، فایلهایی مثل test.txt و notes.txt دیگر توسط Git دیده نمیشوند.
۲. استفاده از الگوی خاص: اگر فایلهایی با نامهای farzad.log و farhad.log داشته باشید، میتوانید از الگوی far?.log استفاده کنید تا هر فایلی که با عبارت far شروع شده، با ad.log تمام میشود و بین آنها فقط یک کاراکتر متفاوت است، نادیده گرفته شود.
۳. مدیریت فایلهای شخصی: اگر فایلی به نام token.txt دارید که حاوی دسترسیهای شخصی شماست و نمیخواهید حتی نام آن در .gitignore پروژه (که بقیه همکاران میبینند) بیاید، آدرس آن را در مسیر .git/info/exclude وارد میکنید.
بیشتر بدانید
Comment در فایل تنظیمات
در فایلهای .gitignore یا exclude میتوانید با استفاده از کاراکتر # کامنت بگذارید. Git خطوطی که با این کاراکتر شروع میشوند را نادیده میگیرد و این کار برای توضیح علت نادیده گرفتن فایلها به همتیمیها بسیار مفید است.
محل قرارگیری فایل
فایل .gitignore باید حتماً در ریشه اصلی پروژه (همانجایی که پوشه مخفی .git قرار دارد) ساخته شود تا به درستی تمام زیرپوشهها را تحت پوشش قرار دهد.
پاکسازی فایلهای اشتباهاً Track شده
اگر فایلی مثل password.txt را اشتباهاً Add کردید و حالا میخواهید آن را نادیده بگیرید، ابتدا نام آن را در لیست Ignore قرار دهید و سپس دستور git rm --cached password.txt را در ترمینال اجرا کنید تا Git دیگر به آن توجهی نکند.
