غالباً، هنگام کار برروی پروژه‌هایی که از Git استفاده می‌کنند، این موقعیت پیش می‌آید که بخواهید از انتقال فایل‌های خاص یا دایرکتوری‌های خاصی به مخزن ریموت یا همان سرور جلوگیری کنید.

فایل gitignore. مشخص می‌کند که چه فایل‌هایی را Git باید نادیده بگیرد.

 

 

این مطلب نیز ممکن است برای شما مفید باشد: گیت برای مبتدیان

 

چه فایل‌هایی را باید نادیده گرفت؟

فایل‌های نادیده گرفته شده، معمولاً فایل‌هایی با پلتفرم مخصوص یا فایل‌های به‌صورت خودکار ایجاد شده، هستند. برخی از نمونه‌های رایج عبارتند از:

  • فایل‌های زمان اجرا، مانند گزارش، قفل، حافظه پنهان یا فایل‌های موقتی.
  • فایل‌هایی با اطلاعات حساس، مانند گذرواژه‌ها یا کلیدهای API.
  • کد کامپایل شده، مانند class. یا o.
  • دایرکتوری‌های وابستگی، مانند vendor/ یا node_modules/.
  • دایرکتوری‌های Build، مانند public، /out/، یا dist/.
  • فایل‌های سیستم، مانند DS_Store. یا Thumbs.db
  • فایل‌های پیکربندی IDE یا ویرایشگر متن.

 

الگوهای gitignore

فایل gitignore.، یک فایل متنی ساده است که در آن، هر خط شامل یک الگو برای نادیده گرفتن فایل‌ها یا دایرکتوری‌ها است.

gitignore. از الگوهای globbing برای تطابق نام فایل‌ها با کاراکترهای wildcard استفاده می‌کند. اگر فایل‌ها یا دایرکتوری‌های حاوی الگوی wildcard دارید، می‌توانید برای جلوگیری از تطابق فایل با الگو، از یک کاراکتر \ استفاده کنید.

 

کامنت‌ها

خطوطی که با علامت هش (#) شروع می‌شوند، کامنت هستند و نادیده گرفته می‌شوند. خطوط خالی را می‌توان برای بهبود خوانایی فایل و گروه بندی مربوط به خطوط الگوها استفاده کرد.

 

اسلش

نماد اسلش (/) نمایانگر جداکننده دایرکتوری است. اسلش در ابتدای یک الگو، مربوط به دایرکتوری شامل gitignore. می‌باشد.

اگر الگوی مربوطه با یک اسلش شروع شود، تنها دایرکتوری‌ها و فایل‌های داخل root مخزن را مطابقت می‌دهد.

اگر الگوی مربوطه با یک اسلش شروع نشود، فایل‌ها و دایرکتوری‌های هر دایرکتوری و زیردایرکتوری را مطابقت می‌دهد.

اگر الگوی مربوطه با یک اسلش پایان یابد، فقط دایرکتوری‌ها را مطابقت می‌دهد. دقت کنید که هنگامی‌که یک دایرکتوری نادیده گرفته می‌شود، تمام فایل‌ها و زیرشاخه‌های آن نیز نادیده گرفته می‌شوند.

 

این مطلب نیز ممکن است برای شما مفید باشد: push کردن به چند مخزن در گیت

 

نام دقیق فایل‌ها

ساده‌ترین الگو، استفاده از نام دقیق یک فایل و بدون کاراکترهای خاص است.

الگو                 نمونه‌های تطابق                           
/access.log access.log
access.log access.log
logs/access.log
var/logs/access.log
build/ build

 

 

 

 

 

نمادهای Wildcard

* - نماد ستاره، با صفر یا چندین کاراکتر مطابقت دارد.

الگو        نمونه‌های تطابق                       
*.log error.log
logs/debug.log
build/logs/error.log

 

 

 

 

* * - نماد دو ستاره مجاور، با هر فایل یا صفر یا چندین دایرکتوری مطابقت دارد. اگر یک اسلش به دنبال آن بیاید، تنها با دایرکتوری‌ها مطابقت دارد.

الگو          نمونه‌های تطابق                        
logs/** تطابق فایل ها و دایرکتوری های داخل دایرکتوری logs
**/build var/build
pub/build
build
foo/**/bar foo/bar
foo/a/bar
foo/a/b/c/bar

 

 

 

 

 

 

 

؟ - علامت سوال، تنها با یک کاراکتر واحد تطابق دارد.

 الگو                  نمونه‌های تطابق                        
access?.log access0.log
access1.log
accessA.log
foo?? fooab
foo23
foo0s

 

 

 

 

 

 

براکت مربع

[...]، با هر یک از کاراکترهای محصور شده در براکت‌های مربع مطابقت دارد. هنگامی‌که دو کاراکتر توسط یک کاراکتر"-" جدا می‌شوند، نشان‌دهنده طیف وسیعی از کاراکترها است. رنج آن شامل تمام کاراکترهایی است که بین آن دو کاراکتر قرار دارند. این کاراکترها می‌توانند حروف الفبا یا عدد باشند.

اگر اولین کاراکتر پس از [، یک علامت تعجب (!) باشد، الگوی مربوطه با هر کاراکتر به جز این مجموعه کاراکترهای مشخص شده مطابقت دارد.

به مثال های زیر دقت کنید:

الگو                    نمونه‌های تطابق                                
*.[oa] file.o
file.a
*.[!oa] file.s
file.1
file.0
access.[0-2].log access.0.log
access.1.log
access.2.log
file.[a-c].out file.a.out
file.b.out
file.c.out
file.[a-cx-z].out file.a.out
file.b.out
file.c.out
file.x.out
file.y.out
file.z.out
access.[!0-2].log access.3.log
access.4.log
access.Q.log

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

الگوهای منفی

الگویی که با یک علامت تعجب (!) شروع می‌شود، هر فایلی را که توسط الگوی قبلی نادیده گرفته شده است، رد می‌کند. به عبارت دیگر آن فایل را در نظر می‌گیرد. استثناء این قاعده، برای فایلی است که دایرکتوری والد آن نادیده گرفته شده است.

                            نمونه‌های تطابق        الگو
error.log یا logs/error.log  نادیده گرفته نمی شوند *.log
!error.log

 

 

 

نمونه ای از gitignore

در زیر، نمونه‌ای از آنچه ممکن است در فایل gitignore. مشاهده کنید، نمایش داده شده است:

# Ignore the node_modules directory
node_modules/

# Ignore Logs
logs
*.log

# Ignore the build directory
/dist

# The file containing environment variables 
.env

# Ignore IDE specific files
.idea/
.vscode/
*.sw*

 

gitignore. محلی

یک فایل gitignore. محلی، معمولاً در دایرکتوری root مخزن (همان دایرکتوری شروع پروژه) قرار می‌گیرد. با این وجود، شما می‌توانید چندین فایل gitignore. را در زیردایرکتوری‌های مختلف، در مخزن خود ایجاد کنید. الگوهای موجود در فایل‌های gitignore. با دایرکتوری که فایل در آن قرار دارد مطابقت دارد.

الگوهای تعریف شده در فایل‌هایی که در دایرکتوری‌های سطح پایین (زیر دایرکتوری‌ها) قرار دارند، نسبت به موارد موجود در دایرکتوری‌های سطح بالاتر اولویت دارند.

فایل‌های gitignore. محلی با سایر توسعه‌دهندگان به اشتراک گذاشته می‌شوند و باید حاوی الگویی باشند که برای تمام دیگر کاربران مخزن مفید است.

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه بازنشانی آخرین commit در گیت (git)

 

قوانین شخصی

الگوی‌هایی که مختص مخزن محلی شما هستند و نباید برای مخزن‌های دیگر توزیع شوند، باید در فایل git/info/exclock. قرار بگیرند.

به عنوان مثال، شما می‌توانید از این فایل برای نادیده گرفتن فایل‌های تولید شده از ابزارهای پروژه شخصی خود استفاده کنید.

 

gitignore. سراسری

Git، این امکان را نیز فراهم می‌کند که یک فایل gitignore. سراسری ایجاد نمایید. در آنجا، شما می‌توانید قوانین مربوط به نادیده گرفتن فایل‌ها و دایرکتوری‌ها را برای هر مخزن Git، در سیستم محلی خود تعریف کنید.

این فایل را می‌توانید با هر نامی نام‌گذاری کرده و در هر مکانی ذخیره نمایید. رایج‌ترین مکان برای نگهداری این فایل، دایرکتوری home است. برای استفاده از فایل، باید آن را به صورت دستی ایجاد کرده و Git را پیکربندی نمایید.

به عنوان مثال، برای تنظیم gitignore_global./~ به‌عنوان فایل سراسری Git که در آن قوانین نادیده گرفتن فایل‌ها و دایرکتوری‌ها بصورت سراسری وجود دارد، مراحل زیر را دنبال کنید:

1. فایل را ایجاد نمایید:

$ touch ~/.gitignore_global

2. فایل را به پیکربندی Git اضافه کنید:

$ git config --global core.excludesfile ~/.gitignore_global

3. فایل را با ویرایشگر متن خود باز کرده و قوانین خود را به آن اضافه نمایید.

قوانین سراسری، به‌طور ویژه برای نادیده گرفتن فایل‌های خاصی که هرگز نمی‌خواهید کامیت شوند، مانند فایل‌هایی با اطلاعات حساس و یا فایل‌های قابل اجرای کامپایل شده مفید هستند.

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه نصب و پیکربندی GitLab در سیستم عامل Ubuntu 18.04

 

نادیده گرفتن فایل‌های کامیت شده

فایل‌هایی که دائماً برروی آن‌ها کار می‌کنید، طبق میل شما می‌توانند توسط Git ردیابی شوند یا ردیابی نشوند.

بنابراین، برای نادیده گرفتن فایلی که قبلاً کامیت کرده‌اید، باید فایل مورد نظر را از فهرست فایل‌ها برای کامیت حذف کرده و سپس یک قانون برای آن فایل در gitignore. اضافه نمایید:

$ git rm --cached filename

گزینه cached-- به git می‌گوید که فایل را از درخت کاری (مجموعه‌ای از فایل‌هایی که دائماً برروی آن کار می‌کنید)، حذف نکند؛ بلکه فقط آن را از فهرست فایل‌های کامیت حذف نماید.

برای حذف بازگشتی یک دایرکتوری، از گزینه r- استفاده کنید:

$ git rm --cached filename

اگر می‌خواهید فایل را هم از فهرست فایل‌های کامیت و هم از سیستم فایل محلی حذف نمایید، گزینه cached-- موجود در مثال بالا را نباید بکار ببرید.

هنگام حذف فایل به صورت بازگشتی، از گزینه n- استفاده کنید تا یک “dry run” اجرا کرده و به شما نشان دهد چه فایل‌هایی حذف خواهند شد:

$ git rm -r -n directory

 

اشکال زدایی فایل gitignore

گاهی اوقات تشخیص اینکه چرا یک فایل خاص نادیده گرفته شده است، به یک چالش مبدل می‌شود؛ به‌ویژه هنگامی‌که از چندین فایل gitignore. یا الگوهای پیچیده استفاده می‌کنید. در اینجاست که دستور git check-ignore با گزینه v- قابل استفاده است؛ چرا که به git می‌گوید، جزئیات در مورد الگوی تطبیق را نمایش دهد.

در واقع، این دستور نشان می‌دهد که این فایل به چه علت توسط git نادیده گرفته میشود!

به‌عنوان مثال، برای بررسی دلیل نادیده گرفتن فایل www/yarn.lock، باید دستور زیر را اجرا کنید:

$ git check-ignore -v www/yarn.lock

خروجی، مسیر فایل gitignore، تعداد خط تطبیق و الگوی واقعی را نشان می‌دهد.

Output:
www/.gitignore:31:/yarn.lock	www/yarn.lock

این دستور، بیش از یک نام فایل را نیز می‌تواند به عنوان آرگومان بپذیرد، و حتی فایل‌هایی را که در درخت کاری شما وجود ندارند.

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه تغییر پیام Git Commit

 

نمایش همه فایل‌های نادیده گرفته شده

دستور git status با گزینه ignored--، لیستی از تمام فایل‌های نادیده گرفته شده را نشان می‌دهد:

$ git status --ignored

 

 

منبع:

linuxize