Git یک سیستم کنترل نسخه توزیع شده است، به این معنی که کل تاریخچه مخزن (repository) در طول فرآیند کلون (clone) به کاربر منتقل می شود. برای پروژه هایی که حاوی فایل های بزرگ هستند، به خصوص فایل های بزرگی که به طور مرتب تغییر می کنند، این کلون اولیه می تواند زمان زیادی را به خود اختصاص دهد، زیرا هر نسخه از هر فایل باید توسط کاربر دانلود شود. Git LFS (ذخیره سازی فایل های بزرگ) یک افزونه Git است که توسط Atlassian، GitHub و چند مشارکت کننده دیگر متن باز توسعه یافته است که تأثیر فایل های بزرگ در مخزن شما را با دانلود تدریجی (lazy) نسخه های مرتبط آنها کاهش می دهد. به طور خاص، فایل های بزرگ در طول فرآیند پرداخت (checkout) به جای کلون یا دریافت (fetch)، دانلود می شوند.
Git LFS این کار را با جایگزین کردن فایل های بزرگ در مخزن شما با فایل های اشاره گر (pointer) کوچک انجام می دهد. در استفاده معمولی، شما هرگز این فایل های اشاره گر را نخواهید دید زیرا آنها به طور خودکار توسط Git LFS مدیریت می شوند:
۱. هنگامی که یک فایل را به مخزن خود اضافه می کنید، Git LFS محتوای آن را با یک اشاره گر جایگزین می کند و محتوای فایل را در حافظه کش محلی Git LFS ذخیره می کند.
۲. هنگامی که کامیت های جدید را به سرور ارسال می کنید (با git push
), هر فایل Git LFS که توسط این کامیت های تازه فرستاده شده ارجاع داده شده باشد، از حافظه کش محلی Git LFS شما به مخزن (store) دور Git LFS مرتبط با مخزن Git شما منتقل می شود.
هنگامی که یک کامیت (commit) حاوی اشاره گرهای Git LFS را (checkout) می کنید، این اشاره گرها با فایل هایی از حافظه کش محلی Git LFS شما جایگزین می شوند، یا از مخزن (store) Git LFS راه دور دانلود می شوند.
Git LFS یکپارچه عمل می کند: در نسخه کاری خود (working copy) تنها محتوای واقعی فایل ها را خواهید دید. این بدان معناست که بدون نیاز به تغییر در گردش کار گیت (Git workflow) فعلی خود می توانید از Git LFS استفاده کنید؛ به سادگی از دستورات git checkout
، ویرایش، git add
و git commit
به شکل عادی استفاده کنید. عملیات git clone
و git pull
بسیار سریعتر انجام خواهند شد، زیرا تنها نسخههای فایلهای بزرگ ارجاع داده شده توسط کامیتهایی که واقعا پرداخت (checkout) میکنید دانلود میشوند، نه همه نسخههایی که تا به حال وجود داشتهاند.
برای استفاده از Git LFS، به یک هاست سازگار با Git LFS مانند Bitbucket Cloud یا Bitbucket Data Center نیاز دارید. کاربران مخزن باید کلاینت خط فرمان Git LFS یا یک کلاینت گرافیکی سازگار با Git LFS مانند Sourcetree را نصب کرده باشند. نکته جالب: استیو استریتینگ، توسعه دهنده Atlassian که Sourcetree را اختراع کرد، یکی از مشارکتکنندگان اصلی پروژه Git LFS نیز هست، بنابراین Sourcetree و Git LFS به خوبی با هم کار می کنند.
نصب GIT LFS
سه روش آسان برای نصب Git LFS وجود دارد:
الف. نصب با استفاده از مدیریت بسته (package manager) مورد علاقه خود. پکیجهای git-lfs برای Homebrew، MacPorts، dnf و packagecloud در دسترس هستند.
ب. دانلود و نصب Git LFS از وبسایت پروژه.
پ. نصب Sourcetree، یک کلاینت گرافیکی رایگان Git که همراه با Git LFS ارائه میشود.
پس از اینکه git-lfs در مسیر (path) شما قرار گرفت، دستور git lfs install را برای راهاندازی Git LFS اجرا کنید (اگر Sourcetree را نصب کردهاید میتوانید این مرحله را رد کنید).
$ git lfs install Git LFS initialized
شما فقط نیاز دارید یکبار دستور git lfs install
را اجرا کنید. پس از راهاندازی برای سیستم شما، Git LFS به طور خودکار خودش را راهاندازی خواهد کرد (bootstrap) زمانی که یک مخزن حاوی محتوای Git LFS را کلون (clone) میکنید.
ایجاد یک مخزن جدید Git LFS
برای ایجاد یک مخزن سازگار با Git LFS، بعد از اینکه مخزن را ساختید، باید دستور git lfs install
را اجرا کنید.
# initialize Git
$ mkdir Atlasteroids
$ cd Atlasteroids
$ git init
Initialized empty Git repository in /Users/tpettersen/Atlasteroids/.git/# initialize Git LFS
$ git lfs install
Updated pre-push hook.
Git LFS initialized.
این دستور یک قلاب پیش از ارسال (pre-push hook) ویژه در مخزن شما نصب می کند که هنگام اجرای دستور git push
فایل های Git LFS را به سرور منتقل می کند.
Git LFS برای تمام مخزنهای Bitbucket Cloud به صورت خودکار فعال است. برای Bitbucket Data Center، باید Git LFS را در تنظیمات مخزن خود فعال کنید.
پس از راهاندازی Git LFS برای مخزن خود، میتوانید با استفاده از دستور git lfs track
مشخص کنید که کدام فایلها را مدیریت کند.