فهرست مطالب
وقتی پروژهای را میسازید و اولین بار دستور git status را اجرا میکنید، دهها فایل تولیدشده توسط مفسر، پکیجمنیجر یا محیط توسعه در فهرست فایلهای ردیابینشده ظاهر میشوند. اگر به اشتباه این موارد را کامیت کنید، حجم مخزن به سرعت بالا میرود، اطلاعات محرمانه نظیر کلیدهای اتصال به دیتابیس به اشتراک گذاشته میشوند و اعضای دیگر تیم با تداخلهای مداوم روبهرو خواهند شد. راهحل بنیادین گیت برای این مسئله، استفاده از فایلی متنی به نام gitignore. است.
فایل gitignore چیست و چه کاربردی دارد
فایل gitignore. یک فایل متنی ساده در مسیر پروژه است که به گیت فرمان میدهد چه مسیرها، پسوندها یا پوشههایی را در فرایند ردیابی و استیج نادیده بگیرد. هر خط از این فایل نمایانگر یک الگوی تطبیق است.
گیت پیش از افزودن فایلها به محدوده تغییرات، محتوای این فایل را میخواند. فایلهای نادیدهگرفتهشده در خروجی git status ظاهر نمیشوند و دستور عمومی git add . نیز آنها را به مخزن اضافه نمیکند.
بر اساس مستندات رسمی گیت، سه سطح برای نادیده گرفتن فایلها وجود دارد:
۱. فایل gitignore. در ریشه پروژه: این فایل باید در مخزن کامیت شود تا تمام اعضای تیم از قوانین یکسانی برای فایلهای کامپایلشده و پکیجها تبعیت کنند.
۲. فایل info/exclude. در شاخه git.: قوانینی که فقط به روند کار شخص شما روی یک مخزن خاص مربوط است و نیازی به اشتراکگذاری عمومی ندارد در این مسیر نوشته میشود.
۳. تنظیم سراسری core.excludesFile: این بخش معمولاً در مسیر config/git/ignore. سیستم عامل ذخیره میشود و برای ابزارهای شخصی سیستم شما مانند تنظیمات ادیتور یا فایلهای مخفی سیستم عامل کاربرد دارد.
قواعد و الگوهای نوشتن در gitignore
برای نوشتن الگوها در این فایل، گیت قواعد استانداردی را بر پایه الگوهای مسیر ارائه میدهد:
- خط خالی نادیده گرفته میشود و برای فاصلهگذاری مناسب است.
- خطی که با علامت
#شروع شود کامنت در نظر گرفته میشود. - علامت ستاره (
*) با هر رشتهای از کاراکترها به جز اسلش تطبیق داده میشود. - دو ستاره متوالی (
**) برای تطبیق با مسیرهای تو در تو در هر عمقی استفاده میشود؛ مثلاً الگویfoo/**/barتمام مسیرهای بین این دو پوشه را پوشش میدهد. - علامت اسلش در ابتدای الگو مسیر را به همان دایرکتوری محدود میکند؛ مثلاً
build/فقط پوشه build در ریشه را هدف میگیرد، در حالی کهbuildبدون اسلش، هر پوشهای با این نام را در هر عمقی نادیده میگیرد. - علامت تعجب (
!) الگو را برعکس میکند؛ به این معنی که اگر فایلی با قوانین قبلی نادیده گرفته شده باشد، دوباره به ردیابی بازگردانده میشود.
یک نکته فنی مهم در مستندات گیت وجود دارد: اگر یک پوشه والد به صورت کامل نادیده گرفته شود، استفاده از علامت تعجب روی فایلهای درون آن کار نخواهد کرد؛ زیرا گیت برای حفظ سرعت، اصلاً وارد پوشههای نادیدهگرفتهشده نمیشود.
یک نمونه واقعی از تنظیم gitignore
فرض کنید یک پروژه جاوااسکریپت یا وب دارید. در ریشه مخزن فایلی با نام gitignore. بسازید و محتوای زیر را در آن قرار دهید:
text# نادیده گرفتن وابستگیهای پروژه
node_modules/
vendor/
# فایلهای محیطی و اطلاعات محرمانه
.env
.env.local
*.pem
# فایلهای خروجی فرآیند ساخت
dist/
build/
*.log
# فایلهای موقت سیستم عامل و ویرایشگر
.DS_Store
.vscode/
!.vscode/settings.json
اگر فایل تست test.log را بسازید و دستور وضعیت را اجرا کنید:
bashgit status
خروجی به این صورت خواهد بود و هیچ نامی از test.log یا پوشههای کامپایل مشاهده نخواهید کرد:
textOn branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
اشتباه رایج درباره فایلهای از قبل ردیابیشده
بزرگترین اشتباهی که افراد مرتکب میشوند این است که ابتدا فایلی را کامیت میکنند و سپس نام آن را داخل gitignore. مینویسند. قانون طلایی گیت این است: فایلی که قبلاً ردیابی و کامیت شده باشد، با نوشتن در gitignore. نادیده گرفته نمیشود.
اگر فایلی را به اشتباه ثبت کردهاید و اکنون میخواهید بدون حذف فیزیکی از روی دیسک، آن را از ردیابی گیت خارج کنید، از دستور زیر استفاده کنید:
bashgit rm --cached filename
این دستور فایل را در حافظه استیج برای حذف از تاریخچه بعدی علامتگذاری میکند اما نسخه فیزیکی آن در پوشه کاری شما باقی میماند. پس از اجرای آن، الگوی مربوطه را در gitignore. قرار دهید و وضعیت جدید را کامیت کنید.
قدم بعدی
نادیده گرفتن فایلهای زائد اولین گام برای نگهداری یک مخزن حرفهای است. برای یادگیری ساختار داخلی گیت، مدیریت شاخهها، بازگردانی تغییرات و ابزارهای تیمی، دوره گیت و گیتهاب تعاملی تمام این مفاهیم را در قالب محیط تمرین عملی آموزش میدهد.




نظرها
اولین نفری باشید که نظر میدهدسؤالتان را بپرسید یا تجربهتان را بنویسید تا نویسندهی مطلب پاسخ بدهد.