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

img
img
img
img
shape
shape
blog-details
21
فروردین
پاک کردن فایل و پوشه از مخزن گیت
نویسنده : محمدرضا لیایی
دسته بندی : آموزش گیت کنترلر
زمان مطالعه : 10 دقیقه

شاید برای شما هم بسیار اتفاق افتاده است که بخواهید بعضی از فایل ها و پوشه ها را از مخزن گیت خارج کنید به گونه ای که دیگر نرم افزار به تغییرات در درون این پوشه ها گوش ندهد.

برای انجام چنین فرآیندی گیت فایلی به پسوند .gitignore را در نظر گرفته است که شامل کد های متنی بسیار ساده ای است و جهت exclude کردن کافی است مسیر فایل ها و فولدرها را در درون آن بنویسیم. در این جلسه قصد داریم تا با اصول ایجاد این چنین فایلی بیشتر آشنا شویم. 
مانند جلسات قبل برای ادامه کار از پروژه جلسه قبل شروع می کنیم.

در فولدر جلسه قبل پوشه ای به نام assets ایجاد می نمائیم و در درون آن دو فایل style.css و javascript.js را ایجاد می کنیم. در فولدر اصلی پروژه نیز یک فایل به نام shop.html اضافه می کنیم. برای ساختن فایل gitignore از طریق command دستور زیر را وارد می کنیم. با استفاده از دستور زیر می توانید در پروژه خود فایل gitignore را ایجاد نمائید.

$ touch .gitignore

البته شما می توانید به صورت دستی با استفاده از new file نیز این فایل را ایجاد کنید. که ترجیحا ما در اینجا از روش command line استفاده کرده ایم.

 

نکته: فولدر مخزن git به صورت hidden شده در پوشه پروژه ساخته می شود برای اینکه بتوانید آن را مشاهده کنید می بایست حتما ابتدا تیک show hidden file را در سیستم عامل خود بزنید تا این فایل نمایش داده شود.

 در این شرایط اگر یکبار از پوشه، git status بگیریم داریم:

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        assets/
        shop.html

nothing added to commit but untracked files present (use "git add" to track)

مشاهده می کنیم که فایل assets و فایل های .gitignore و shop.html در درون حالت unstage قرار گرفته اند. حالا با استفاده از فایل .gitignore می خواهیم پوشه assets را exclude کنیم. برای این کار کافی است تا فایل gitignore را با ادیتور کد باز کرده و در خط اول آن مقادیر زیر را وارد نمائیم.

assets/*

و حالا اگر دوباره git status بگیریم داریم:

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        shop.html

nothing added to commit but untracked files present (use "git add" to track)

همانطور که مشاهده می کنید پوشه assets از مخزن گیت خارج شده است و دیگر تغییرات آن در درون git در نظر گرفته نمی شود.

به روش فوق تمامی فایل های درون پوشه از مخزن گیت خارج می شود. حالا ممکن است که بخواهید تنها فایلی مثلا فایل style.css را از پوشه خارج کنیم. در این شرایط می توانیم به شکل زیر فرآیند را انجام دهیم.

assets/*
!assets/style.css

حالا اگر مقادیر زیر را در درون style.css وارد کنیم و یک بار git status بگیریم داریم:

body {
    color: #000;
}
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        assets/
        shop.html

nothing added to commit but untracked files present (use "git add" to track)
 

نکته: علامت ! در gitignore به معنی نادیده گرفتن است. این علامت در زبان های برنامه نویسی به صورت not در نظر گرفته می شود. برای خارج کردن پوشه ها و یا فایل ها از gitignore می بایست از این روش استفاده کنیم.

 در اغلب پروژه ها ما فایل هائی با پسوند txt جهت درج کامنت ها و readme داریم که نمی بایست در مخزن گیت قرار بگیرید. برای رفع این مورد می توانیم قطعه کد زیر را در درون gitignore وارد کنیم. ابتدا فایل readme.txt را در درون پوشه اصلی ایجاد می کنیم.

*.txt

حالا اگر یک بار git status بگیریم داریم:

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        assets/
        shop.html

nothing added to commit but untracked files present (use "git add" to track)

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

 

نکته: علامت * به معنی تمامی موارد است. مثلا در مثال بالا با به کار بردن * به گیت فهماندیم که تمامی فایل هائی با فرمت txt را از مخزن خود خارج کند. اگر برای این علامت فرمتی قرار داده نشود تمامی فایل های درون یک فولدر را در نظر خواهد گرفت.

 مورد کاربردی دیگری که ممکن است در برخی از پروژه ها با آن روبرو شوید خارج کردن پوشه ها و فایل هائی است که قبلا فرآیند کامیت شدن را برای آن ها انجام داده ایم. در اینگونه شرایط می بایست چه کار کنیم ؟

فرض کنید در این جا می خواهیم پوشه style پروژه را از مخزن خارج کنیم. در این شرایط کد زیر را وارد gitignore می کنیم. 

Style/*

و حالا تغییراتی بر روی فایل style.css ایجاد می کنیم.

h1 {
    font-size: large;
}

اگر الان دوباره git status بگیریم داریم:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   style/style.css

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        assets/
        shop.html

no changes added to commit (use "git add" and/or "git commit -a")

همانطور که در خروجی بالا مشاهده می کنید تغییرات درون style.css را با وجود اینکه گفته بودیم exclude کند آورده است. این مشکل به خاطر این است که ما قبلا پوشه style را commit کرده ایم. برای رفع این مشکل می بایست ابتدا تمامی cache گیت را یکبار پاک کنیم. با استفاده از دستور زیر این کار را انجام می دهیم.

$ git rm --cached -r .

حالا اگر دوباره git status بگیریم داریم:

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    aboutus.html
        deleted:    contactus.html
        deleted:    index.html
        deleted:    style/style.css

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        aboutus.html
        assets/
        contactus.html
        index.html
        shop.html

و سپس بدون درنگ دستور زیر را وارد می کنیم:

$ git add .

و اگر دوباره git status بگیریم داریم:

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   .gitignore
        new file:   assets/style.css
        new file:   shop.html
        deleted:    style/style.css

همانطور که می بینید style.css از درون git پاک شده است و کنار آن عبارت deleted نوشته شده است.

و حالا با یک بار commit کردن می توانیم تغییرات مد نظر را بر روی پروژه اعمال کنیم.

$ git commit –m “gitignore added to repository”

و از این به بعد تغییرات درون پوشه style دیگر در نظر گرفته نخواهد شد.

جمع بندی:

در این جلسه مورد کاربردی gitignore را مورد بررسی قرار دادیم و پوشه و فایل هائی را از پروژه به خوبی توانستیم ignore کنیم. در جلسه آینده به پیکر بندی نرم افزار گیت خواهیم پرداخت.

لیست قسمت های این دوره:
رایگان 20 دقیقه
رایگان 30 دقیقه
رایگان 35 دقیقه
رایگان 15 دقیقه
رایگان 5 دقیقه