چیست؟Git clean
در این بخش به بررسی عمیق تر دستور git clean می پردازیم. git clean تا حدودی یک دستور ‘undo’ است. git clean می تواند به عنوان مکمل برای سایر دستور هایی مانند git reset و git checkout، در نظر گرفته شود. در حالی که دستور های گفته شده با فایل هایی کار می کنند که قبلا به فهرست فایل های دنبال شده توسط گیت اضافه شده اند، دستور git clean با فایل های دنبال نشده، کار می کند. فایل های دنبال نشده فایل هایی هستند که به مسیر مخزن شما اضافه شده اند اما هنوز توسط git add
به فهرست دنبال شونده های git اضافه نشده اند. برای درک بهتر مفهوم فایل های دنبال شده و دنبال نشده مثال زیر را در نظر بگیرید:
mkdir git_clean_test
cd git_clean_test/
git init .
echo "tracked" > ./tracked_file
git add ./tracked_file
echo "untracked" > ./untracked_file
mkdir untracked_dir && touch untracked_dir/file
اگر پس از اجرای دستور های بالا git status را اجرا کنید یک خروجی مانند زیر دریافت خواهید کرد:
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: tracked_file
Untracked files:
(use "git add <file>..." to include in what will be committed)
untracked_dir/
untracked_file
این مثال یک مخزن جدید در پوشه ی git_clean_test
ایجاد می کند. سپس یک tracked_file
ایجاد می کند که به فهرست گیت اضافه می شود. افزون بر آن یک untracked_file
و untracked_dir
نیز ساخته می شود. سپس دستور git status را اجرا می کند تا وضعیت فایل های دنبال شده و نشده را مشاهده کنیم. با داشتن مخزنی در این حالت می توانیم دستور git clean را اجرا کنیم تا هدف آن را نشان دهیم.
fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean
در این مرحله اجرای دستور git clean یک خطای fatal مانند بالا ایجاد می کند. به طور پیش فرض گیت به صورت global پیکربندی شده است تا برای اجرا گزینه ی force را دریافت کند. این یک فرایند ایمنی مهم است. هنگامی که دستور git clean اجرا شود نمی توان آن را به حالت قبل از اجرا برگرداند. هنگامی که اجرای git clean به اتمام برسد، گیت، فایل هایی را از حافظه ی سیستم پاک می کند. این کار مشابه اجرای دستور rm
در خط فرمان سیستم عامل است. تنها هنگامی دستور git clean را استفاده کنید که مطمئن باشید قصد حذف فایل های دنبال نشده را دارید.
گزینه های معمول و کاربرد Git clean
با توجه به توضیح ها و هشدار هایی که درمورد عملکرد git clean داده شد، این بخش کاربرد هایgit clean و گزینه های مختلف آن را نشان می دهد.
-n
گزینه ی -n
دستور git clean را به صورت مجازی اجرا می کند. به این معنی که توسط این گزینه شما می توانید ببینید چه فایل هایی حذف خواهند شد، بدون اینکه آن ها را حذف کنید. استفاده از این گزینه قبل از اجرای git clean توصیه می شود.
اگر این دستور را در مثالی که زده بودیم اجرا کنیم خروجی زیر را دریافت می کنیم:
Would remove untracked_file
خروجی به ما می گوید که untracked_file
حذف خواهد شد. توجه کنید که untracked_dir
در این خروجی گزارش نشده است. به طور پیش فرض git clean به صورت بازگشتی روی پوشه ها کاری انجام نمی دهد. این یک فرایند ایمنی دیگر برای جلوگیری از حذف ناخواسته فایل ها محسوب می شود.
-f
یا
--force
گزینه ی force حذف فایل های دنبال نشده در مسیر فعلی را انجام می دهد. گزینه ی force برای اجرای دستور git clean اجباری است مگر اینکه پیکربندی clean.requireForce در گیت شما false باشد. این دستور پوشه ها یا فایل هایی که در .gitignore
مشخص شده باشند را پاک نمی کند. پس از اجرای دستور git clean -f
خروجی مانند زیر خواهیم داشت.
Removing untracked_file
دستور git clean فایل هایی که پاک شده اند را نشان می دهد. در مثال ما فایل untracked_file
پاک شده است. اجرای git status یا ls در این مرحله به ما نشان می دهد که untracked_file
حذف شده است و نمی توان آن را هیچ جایی پیدا کرد. به طور پیش فرض دستور git clean -f
روی تمام فایل های دنبال نشده مسیر فعلی اجرا می شود. همچنین می توان مقداری را به گزینه ی -f
داد تا تنها یک فایل خاص را پاک کند.
git clean -f -d
گزینه ی -d
به git clean می گوید که شما می خواهید هر پوشه ای که در مسیر فعلی موجود است را هم پاک کنید. گزینه ی -d
را می توان با مثال های قبل هم ترکیب کرد.
git clean -dn
git clean -df
ترکیب dn
، دستور را به صورت مجازی اجرا می کند و به ما می گوید که با اجرای دستور اصلی پوشه ی untracked_dir
پاک خواهد شد. ترکیب df
هم پوشه ی untracked_dir
را پاک می کند و در خروجی به ما گزارش می دهد.
-x
گاهی اوقات ممکن است نیاز داشته باشید که فایل های موجود در .gitignore
را هم پاک کنید. گزینه ی -x
به git clean می گوید که با فایل های ignore شده هم کار کند. همانطور که قبل تر گفته شد توصیه می شود پیش از اجرای git clean یک بار این دستور را به صورت مجازی اجرا کنید. گزینه ی -x
هر فایلی که در .gitignore
باشد را پاک می کند و این ممکن است منجر به پاک شدن نا خواسته پوشه ای مانند .ideaکه مربوط به IDE شما است، بشود.
git clean -xf
مانند گزینه ی -d
گزینه ی -x
هم می تواند با بقیه ترکیب شود. مثال بالا ترکیب این گزینه با -f
را نشان می دهد که باعث می شود تمام فایل های دنبال نشده ی مسیر فعلی به همراه فایل های ignore شده، پاک شوند.
حالت تعاملی Git clean
git clean یک حالت تعاملی دارد که با گزینه ی -i
فعال می شود. مثال ابتدای مطلب را مجددا اجرا می کنیم و این بار با حالت تعاملی فایل ها را پاک می کنیم.
دستور زیر را اجرا می کنیم:
git clean -di
خروجی دستور بالا مانند زیر خواهد بود:
Would remove the following items:
untracked_dir/ untracked_file
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers
4: ask each 5: quit 6: help
What now>
حالت تعاملی git clean فعال شده است. همچنین گزینه ی -d
را همراه آن قرار دادیم تا روی پوشه ها هم کار کند. حالت تعاملی What now>
را به ما نشان می دهد که از ما می خواهد یک دستور را برای فایل های دنبال نشده اعمال کنیم. گزینه های پیش روی ما در خروجی توضیح داده شده اند. ما نیز هر کدام از آن ها را توضیح خواهیم داد.
دستور 6 دستور های دیگر را توضیح خواهد داد. خروجی آن مانند زیر است:
clean - start cleaning
filter by pattern - exclude items from deletion
select by numbers - select items to be deleted by numbers
ask each - confirm each deletion (like "rm -i")
quit - stop cleaning
help - this screen
? - help for prompt selection
Would remove the following items:
untracked_dir/ untracked_file
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers
4: ask each 5: quit 6: help
دستور 5 از حالت تعاملی خارج می شود.
دستور 1 فایل های گزارش شده در خروجی را پاک می کند. در مثال ما، با اجرای دستور 1 فایل untracked_dir
و پوشه untracked_file
پاک می شوند.
دستور 2 یک ورودی اضافه از ما درخواست می کند تا توسط آن فایل هایی که باید پاک شوند را پیدا کند.
برای مثال پس از اجرای دستور 3 به آن *_file untracked_dir/
را می دهیم. این ورودی باعث می شود همه ی فایل های دنبال نشده در پوشه ی file untracked_dir
پاک شوند.
دستور 3 مانند دستور 2 لیست فایل هایی که باید پاک شوند را تغییر می دهد. پس از انتخاب این دستور درخروجی به هرکدام از فایل های دنبال نشده عددی اختصاص داده می شود تا ما بر اساس عدد، فایل هایی که می خواهیم پاک شوند را انتخاب کنیم.
دستور 4 به ازای هر فایل دنبال نشده سوال می پرسد و ما با Y به معنای تایید و N به معنای رد، می توانیم به آن پاسخ دهیم.
خلاصه
دستور git clean روش خوبی برای پاک کردن فایل های دنبال نشده در یک مخزن است. فایل های دنبال نشده فایل هایی هستند که در مخزن وجود دارند اما هنوز توسط دستور git add
به گیت اضافه نشده اند. نتیجه ی دستور git clean را می توان با اجرای دستور git status
مشاهده کرد. git clean می تواند در کنار git reset
برای برگرداندن کامل تغییرات یک مخزن استفاده شود.