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 Push نمیشود و برای فایلهای شخصی (مثل توکنهای خصوصی یا پسوردهای محلی) که فقط در سیستم شما هستند استفاده میشود. -
چرا نباید پوشه
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?ad.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 دیگر به آن توجهی نکند.
