| GIT-LFS-PRUNE(1) | GIT-LFS-PRUNE(1) |
نام (NAME)
git-lfs-prune - حذف فایلهای قدیمی LFS از حافظه محلی
خلاصه دستور (SYNOPSIS)
git lfs prune [گزینهها]
توضیحات (DESCRIPTION)
نسخههای محلی فایلهای LFS قدیمی را حذف کرده و بدین ترتیب فضای دیسک را آزاد میکند. عملکرد Prune به این صورت است که تمام اشیاء ذخیرهشده محلی را شمارش کرده و سپس هر موردی را که حداقل توسط یکی از موارد زیر ارجاع داده نشده باشد، حذف میکند:
به طور کلی، prune فایلهایی را حذف میکند که در حال حاضر از آنها استفاده نمیکنید و 'اخیر' نیستند، مشروط بر اینکه ارسال شده باشند؛ به این معنی که نسخه محلی تنها نسخه موجود نباشد.
لاگ ارجاعات (reflog) در نظر گرفته نمیشود و فقط کامیتها بررسی میشوند. بنابراین اشیاء LFS که فقط توسط کامیتهای یتیم ارجاع داده شدهاند همیشه حذف میشوند.
نکته: اگر چندین مخزن مختلف دارید که از یک دایرکتوری ذخیرهسازی سفارشی مشترک استفاده میکنند، نباید git lfs prune را اجرا کنید؛ برای جزئیات بیشتر درباره گزینه lfs.storage به git-lfs-config(5) مراجعه کنید.
در پیکربندی Git یا در یک فایل .lfsconfig، میتوانید lfs.fetchexclude را با فهرستی از مسیرها که با کاما از هم جدا شدهاند تنظیم کنید. اگر lfs.fetchexclude تعریف شده باشد، آنگاه هر فایل Git LFS که مسیر آن با یکی از موارد موجود در آن فهرست مطابقت داشته باشد هرس خواهد شد، مگر اینکه توسط یک stash یا یک کامیت ارسالنشده ارجاع داده شده باشد. تطبیق مسیرها با استفاده از تطبیق نویسههای عمومی (wildcard) مطابق با gitignore(5) انجام میشود.
گزینهها (OPTIONS)
-d, --dry-run
-f, --force
--recent
-c, --verify-remote
--no-verify-remote
--verify-unreachable
--no-verify-unreachable
--when-unverified=<halt,continue>
-v, --verbose
فایلهای اخیر (RECENT FILES)
دستور Prune فایلهای LFS ارجاعشده توسط کامیتهای 'اخیر' را حذف نمیکند، تا در صورت تمایل بتوانید مجدداً بدون نیاز به دانلود از آنها استفاده کنید. تعریف 'اخیر' برگرفته از تعریفی است که توسط git-lfs-fetch(1) برای دانلود اشیاء اخیر با گزینه --recent استفاده میشود، همراه با یک آفست از تعدادی روز (به صورت پیشفرض ۳ روز) برای اطمینان از اینکه فایلهای دانلودشده همیشه برای چند روز نگهداری میشوند.
تنظیمات git-config(1) که این رفتار را کنترل میکنند عبارتند از:
lfs.pruneoffsetdays
lfs.fetchrecentrefsdays, lfs.fetchrecentremoterefs, lfs.fetchrecentcommitsdays
فایلهای ارسالنشده LFS (UNPUSHED LFS FILES)
هنگامی که تنها نسخه یک فایل LFS به صورت محلی باشد و همچنان از هر ارجاعی در دسترس باشد، آن فایل صرفنظر از اینکه چقدر قدیمی است، هرگز هرس نخواهد شد.
برای تشخیص اینکه آیا یک فایل LFS ارسال (push) شده است یا خیر، تفاوت بین ارجاعات محلی و دوردست را بررسی میکنیم؛ در جاهایی که ارجاع محلی جلوتر باشد، هر فایل LFS ارجاعشده در آن کامیتها ارسالنشده است و حذف نخواهد شد. این روش کار میکند زیرا قلاب pre-push مربوط به LFS همیشه اطمینان حاصل میکند که فایلهای LFS قبل از بهروزرسانی شاخه دوردست، ارسال شده باشند.
برای اینکه بدانید کدام دوردست برای مقاصد هرس کردن به عنوان 'ارسالشده' در نظر گرفته میشود، به بخش «مخزن دوردست پیشفرض (DEFAULT REMOTE)» مراجعه کنید.
تایید دوردست (VERIFY REMOTE)
گزینه --verify-remote با مخزن دوردست ارتباط برقرار میکند تا اطمینان حاصل کند هر فایل در دسترس LFS که قرار است حذف شود، قبل از حذف واقعی دارای نسخه در دوردست باشد.
معمولاً بررسی انجامشده توسط بخش «فایلهای ارسالنشده LFS» برای اطمینان از ارسال فایلها کافی است، اما اگر میخواهید با صرف هزینه پردازشی بیشتر اطمینان مضاعف حاصل کنید، میتوانید کاری کنید که prune واقعاً با API دوردست ارتباط برقرار کرده و وجود فایلهایی را که میخواهید به صورت محلی حذف کنید بررسی نماید. برای آگاهی از اینکه کدام دوردست بررسی میشود، به بخش «مخزن دوردست پیشفرض (DEFAULT REMOTE)» مراجعه کنید.
میتوانید با تنظیم lfs.pruneverifyremotealways روی true این رفتار را به حالت پیشفرض تبدیل کنید.
علاوه بر هزینه پردازشی ارتباط با مخزن دوردست، استفاده از این گزینه همچنین نیازمند آن است که prune بین فایلهای کاملاً غیرقابلدسترس (مانند فایلهایی که به نمایه اضافه شدهاند اما هرگز کامیت نشدهاند، یا فقط توسط کامیتهای یتیم ارجاع داده شدهاند) و فایلهایی که هنوز ارجاع داده میشوند اما توسط کامیتهای قابل هرس هستند، تفاوت قائل شود. این امر باعث میشود فرآیند prune زمان بیشتری ببرد.
اگر میخواهید اشیاء غیرقابلدسترس را نیز تایید کنید، گزینه --verify-unreachable را تنظیم نمایید.
میتوانید با تنظیم lfs.pruneverifyunreachablealways روی true بررسی اشیاء غیرقابلدسترس را به صورت پیشفرض فعال کنید.
به طور پیشفرض، اگر فایلی قابل تایید نباشد، --verify-remote اجرای عملیات را متوقف میکند. گزینه --when-unverified=continue را تنظیم کنید تا اجرا متوقف نشود بلکه حذف تمامی اشیاء قابل تایید ادامه یابد.
مخزن دوردست پیشفرض (DEFAULT REMOTE)
هنگام شناسایی «فایلهای ارسالنشده LFS» و انجام «تایید دوردست»، معمولاً از یک دوردست واحد یعنی 'origin' به عنوان ارجاع استفاده میشود. این دوردست معتبر و رسمی تلقی میشود؛ حتی اگر از چندین دوردست استفاده میکنید، احتمالاً میخواهید نسخههای محلی خود را تا زمانی که به آن دوردست نرسیدهاند نگه دارید. 'origin' به طور پیشفرض استفاده میشود زیرا معمولاً یک مخزن مرکزی اصلی است، یا انشعاب (fork) شما از آن - در هر دو حالت یک نسخه پشتیبان دوردست معتبر از کار شماست. اگر origin وجود نداشته باشد، به طور پیشفرض هیچ چیزی هرس نخواهد شد زیرا همه چیز به عنوان 'ارسالنشده' تلقی میشود.
میتوانید مخزن دوردست را از طریق git config تغییر دهید: lfs.pruneremotetocheck. این مقدار را روی نام دوردست دیگری تنظیم کنید تا به جای 'origin' آن مورد بررسی شود.
همچنین ببینید (SEE ALSO)
git-lfs-fetch(1), gitignore(5).
بخشی از مجموعه git-lfs(1).