گیت LFS چیست؟
گیت LFS، سیستم کنترل نسخه توزیع شده است. به این معنی که کل تاریخچه مخزن در طول فرآیند شبیه سازی به مشتری منتقل می شود. برای پروژه های حاوی فایل های بزرگ، به ویژه فایل های بزرگی که مرتباً اصلاح می شوند، این شبیه سازی اولیه می تواند زمان زیادی را صرف کند.
زیرا هر نسخه از هر فایل باید توسط مشتری دانلود شود. Git LFS (Large File Storage) یک افزونه Git است که توسط Atlassian، GitHub و چند مشارکت کننده منبع باز دیگر توسعه یافته است که با دانلود کردن نسخه های مربوطه از آنها، تأثیر فایل های بزرگ در مخزن شما را کاهش می دهد.
به طور خاص، فایل های بزرگ در طول فرایند پرداخت، دانلود می شوند. LFS گیت این کار را با جایگزین کردن فایل های بزرگ در مخزن شما با فایل های اشاره گر کوچک انجام می دهد. در طول استفاده معمولی، هرگز این فایل های اشاره گر را نخواهید دید. زیرا به طور خودکار توسط Git LFS مدیریت می شوند. اگر به صورت کلی با گیت و گیت هاب آشنایی ندارید، بهتر است قبل از شروع گیت LSF، آموزش github را مشاهده کنید.
LFS گیت چیست؟
Git LFS چیست؟ Git Large File Storage یک پسوند Git است که به توسعه دهندگان کمک می کند هنگام کار با فایل های باینری در Git فضا را ذخیره کنند. از Git LFS هنگام کار با فایل های صوتی، تصویری یا ویدیویی در Git استفاده کنید. وقتی تغییرات فایل های باینری به یک مخزن راه دور منتقل می شوند، اندازه کنترل از راه دور شما به سرعت شروع به رشد می کند و زمان کلون کردن، فشار دادن، کشیدن یا انجام سایر عملیات ها با مخزن Git را کاهش می دهد.
با Git LFS، commit های شما به شی مرجع سبک وزن اشاره می کنند در حالی که فایل های باینری شما در یک سرور LFS جداگانه ذخیره می شوند. اکنون، هر زمان که این مخزن LFS را شبیه سازی کنید یا یک شعبه از این مخزن LFS را پرداخت کنید، فقط آخرین نسخه فایل باینری را خواهید کشید.
نحوه کار با LFS گیت
هنگامی که فایلی را به مخزن خود اضافه می کنید، Git LFS محتویات آن را با یک اشاره گر جایگزین می کند و محتوای فایل را در یک کش محلی Git LFS ذخیره می کند. وقتی commit های جدید را به سرور فشار می دهید، هر فایل Git LFS که توسط commit های تازه فشار داده شده ارجاع داده می شود، از حافظه پنهان Git LFS محلی شما به فروشگاه Git LFS راه دور که به مخزن Git شما متصل است، منتقل می شود.
هنگامی که یک commit حاوی نشانگرهای Git LFS را پرداخت می کنید، آنها با فایل هایی از حافظه پنهان Git LFS محلی شما جایگزین می شوند یا از فروشگاه راه دور Git LFS دانلود می شوند. Git LFS یکپارچه است، این بدان معناست که می توانید از Git LFS بدون تغییر گردش کار Git فعلی خود استفاده کنید. شما به سادگی git checkout، ویرایش، git add، و git commit را به طور معمول انجام می دهید. عملیات git clone و git pull به طور قابل توجهی سریعتر خواهد بود.
زیرا شما فقط نسخه های فایل های بزرگ را دانلود می کنید که توسط commit هایی که در واقع بررسی می کنید به آنها ارجاع داده شده اند، نه هر نسخه از فایلی که تاکنون وجود داشته است. برای استفاده از Git LFS، به یک هاست آگاه Git LFS مانند Bitbucket Cloud یا Bitbucket Data Center نیاز دارید. کاربران مخزن باید کلاینت خط فرمان Git LFS یا یک کلاینت رابط کاربری گرافیکی آگاه Git LFS مانند Sourcetree را نصب کنند.
نصب LFS گیت
سه روش آسان برای نصب Git LFS وجود دارد:
- آن را با استفاده از مدیر بسته مورد علاقه خود نصب کنید. بستههای git-lfs برای Homebrew، MacPorts، dnf و packagecloud در دسترس هستند.
- Git LFS را از وب سایت پروژه دانلود و نصب کنید.
- Sourcetree، یک کلاینت رایگان Git GUI که همراه با Git LFS است را نصب کنید.
- هنگامی که git-lfs در مسیر شما قرار گرفت، git lfs install را برای مقداردهی اولیه Git LFS اجرا کنید (اگر Sourcetree را نصب کرده اید، می توانید از این مرحله رد شوید)
شما فقط باید یک بار git lfs install را اجرا کنید. هنگامی که برای سیستم شما راه اندازی شد، Git LFS به طور خودکار خود را بوت استرپ می کند، زمانی که یک مخزن حاوی محتوای Git LFS را کلون کنید.
مطالب مرتبط: نصب گیت در ویندوز
ایجاد یک مخزن جدید Git LFS
برای ایجاد یک مخزن جدید Git LFS آگاه، باید git lfs install را بعد از ایجاد مخزن اجرا کنید.
این یک قلاب Git Pre-Push ویژه را در مخزن شما نصب می کند که فایل های Git LFS را هنگام فشار git به سرور منتقل می کند.
Git LFS به طور خودکار برای تمام مخازن Bitbucket Cloud فعال می شود. برای Bitbucket Data Center، باید Git LFS را در تنظیمات مخزن خود فعال کنید.
شبیه سازی یک مخزن Git LFS موجود
هنگامی که Git LFS نصب شد، میتوانید یک مخزن Git LFS را به طور معمول با استفاده از git clone کلون کنید. در پایان فرآیند شبیه سازی، Git شاخه پیش فرض (معمولاً اصلی) را بررسی می کند و هر فایل Git LFS مورد نیاز برای تکمیل فرآیند پرداخت بهطور خودکار برای شما دانلود می شود.
چهار PNG در این مخزن وجود دارد که توسط Git LFS ردیابی می شود. هنگام اجرای git clone، فایل های Git LFS هر بار دانلود می شوند. زیرا فایل های اشارهگر از مخزن شما مورد بررسی قرار می گیرند.
کشیدن و چک کردن
درست مانند شبیه سازی، می توانید از یک مخزن Git LFS با استفاده از یک git pull معمولی بیرون بکشید. هر فایل Git LFS مورد نیاز پس از تکمیل کشش به عنوان بخشی از فرآیند پرداخت خودکار دانلود می شود.
برای بازیابی محتوای Git LFS نیازی به دستور صریح نیست. با این حال، اگر پرداخت به دلیل غیرمنتظره ای با شکست مواجه شد، میتوانید هر محتوای Git LFS گم شده را برای commit فعلی با git lfs pull دانلود کنید.
افزایش سرعت کشش
مانند git lfs clone، git lfs pull فایل های Git LFS شما را به صورت دسته ای دانلود می کند. اگر میدانید تعداد زیادی فایل از آخرین باری که کشیدهاید تغییر کردهاند، ممکن است بخواهید دانلود خودکار Git LFS را در حین پرداخت غیرفعال کنید و سپس محتوای Git LFS خود را با یک کشش صریح git lfs بارگیری کنید. هنگامی که git pull را فراخوانی میکنید، میتوانید با استفاده از گزینه -c پیکربندی Git خود را لغو کنید.
LFS گیت چگونه کار می کند؟
Git LFS به جای فایل های واقعی یا اشیاء بزرگ باینری (blobs) از اشاره گرها استفاده می کند؛ بنابراین، به جای نوشتن فایل ها یا حباب های بزرگ در یک مخزن Git، یک فایل اشارهگر می نویسید و خود فایل ها یا حباب ها در یک سرور جداگانه نوشته می شوند.
به علاوه، با Git LFS می توان از چندین سرور استفاده کرد. شروع کار نسبتاً ساده است. پسوند را دانلود کرده و انواع فایل های خود را پیکربندی می کنید. استفاده از Git LFS امکان نسخهسازی فایلهای بزرگ (و مدیریت حبابها) را فراهم و در عین حال فضا را در مخازن Git آزاد میکند. Git LFS اغلب یک راه حل برای فشار دادن فایل های بزرگ به GitHub است.
آیا باید از Git LFS استفاده کنیم؟
اگر فایل های بزرگ یا فایل های باینری برای ذخیره در مخازن Git دارید، باید از Git LFS استفاده کنید. این به این دلیل است که Git غیرمتمرکز است. بنابراین، هر توسعه دهنده تاریخچه کامل تغییرات را در رایانه خود دارد.
تغییرات در فایل های باینری بزرگ باعث می شود که مخازن Git هر بار که فایل تغییر میکند (و این تغییر متعهد می شود) به اندازه آن فایل بزرگ شود. این بدان معناست که دریافت فایلها زمان میبرد و اگر این کار را انجام دهید، نسخه سازی و ادغام باینری ها دشوار خواهد بود.
بنابراین، هر بار که فایل ها رشد می کنند، مخزن Git بزرگ می شود. هنگامی که کاربران Git نیاز به بازیابی و شبیه سازی یک مخزن دارند، این مشکل ایجاد می کند. به صورت کلی اگر بر روی پروژه های بزرگ با حجم بالا کار می کنید، توصیه می شود که LSF گیت را انتخاب کنید. در صورتی که آموزش پایتون را مشاهده کرده باشید، احتمالا می توانید به درستی در مورد بحث استفاده از این نسخه GIT تصمیم گیری کنید.
وقتی ذخیره سازی فایل بزرگ Git کار نمی کند چکار کنیم؟
Git LFS کار می کند. اما تیم ها مدام به ما می گویند که مدیریت کردن آن سخت است. بنابراین، حتی اگر Git خود رایگان است، می تواند هزینه های بهره وری را افزایش دهد. نصب Git LFS در هر سرور و ایستگاه کاری زمان می برد.
همچنین ادمین ها را سنگین می کند. پس از نصب، هیچ دید و کنترل کمی روی آن وجود ندارد و اگر برخی از توسعه دهندگان پسوند Git LFS را ندارند؟ خراب می شود. برای حفظ فضای ذخیرهسازی فایل بزرگ Git با build runner هایی مانند Jenkins اقدامات بیشتری انجام می شود. این منجر به زمان اضافی و سردرگمی می شود و می تواند مشکلات عملکردی را به همراه داشته باشد.
جایگزین های Git LFS
Git LFS تنها راه برای مدیریت فایل های حجیم در Git نیست. جایگزین هایی وجود دارد. این شامل سایر اصلاحات منبع باز یا شخص ثالث است، مانند:
- git-annex
- git-bigfiles
- git-fat
- git-media
- git-bigstore
- git-sym
اما، درست مانند Git LFS، این گزینه های ذخیره سازی فایل های بزرگ Git می تواند مشکلاتی ایجاد کند. راه بهتری برای مدیریت فایل های حجیم و فایل های باینری وجود دارد.
Git LFS با یک مخزن موجود
تا به حال، نحوه فعال کردن Git LFS را هنگام راهاندازی یک مخزن جدید نشان دادهایم و میدانیم که کدام فایلها را میخواهیم با Git LFS مرتبط کنیم، اما اگر بخواهید LFS گیت را در مخزن موجود خود فعال کنید چه کار باید کرد؟
شما می توانید این کار را به همان روشی که ما برای یک مخزن جدید انجام داده ایم انجام دهید. از آن لحظه به بعد، فایلهای جدید یا بهروزرسانی فایل ها توسط Git LFS ردیابی می شوند. تعهدات قبل از اینکه Git LFS را فعال کنید، به طور خودکار منتقل نمی شوند. با این حال راهی برای مهاجرت کل مخزن شما وجود دارد.
ردیابی فایل ها با Git LFS
هنگامی که نوع جدیدی از فایل بزرگ را به مخزن خود اضافه می کنید، باید به Git LFS بگویید تا با تعیین یک الگو با استفاده از دستور git lfs track، آن را ردیابی کند. توجه داشته باشید که نقل قول های اطراف “*.ogg” مهم هستند.
حذف آنها باعث می شود که علامت عام توسط پوسته شما گسترش یابد و ورودی های جداگانه برای هر فایل .ogg در فهرست فعلی شما ایجاد می شود. الگوهای پشتیبانی شده توسط Git LFS مانند الگوهایی هستند که توسط .gitignore پشتیبانی می شوند.
این الگوها نسبت به دایرکتوری هستند که در آن دستور git lfs track را اجرا کرده اید. برای ساده نگه داشتن کارها، بهتر است مسیر git lfs را از ریشه مخزن خود اجرا کنید. توجه داشته باشید که Git LFS از الگوهای منفی مانند .gitignore پشتیبانی نمی کند.
پس از اجرای git lfs track، فایل جدیدی به نام .gitattributes را در دایرکتوری که دستور را از آن اجرا میکنید، مشاهده خواهید کرد. .gitattributes مکانیزم Git برای اتصال رفتارهای خاص به الگوهای فایل خاص است.
LFS گیت به طور خودکار فایل های .gitattributes را ایجاد یا به روز می کند تا الگوهای فایل ردیابی شده را به فیلتر Git LFS متصل کند. برای سهولت تعمیر و نگهداری، سادهترین کار این است که همه الگوهای Git LFS را در یک فایل .gitattributes با اجرای آهنگ git lfs از ریشه مخزن خود نگه دارید.
با این حال، می توانید فهرستی از تمام الگوهایی را که در حال حاضر توسط Git LFS ردیابی می شوند با فراخوانی مسیر git lfs بدون آرگومان نمایش دهید. شما می توانید ردیابی یک الگوی خاص را با Git LFS به سادگی با حذف خط مناسب از فایل .gitattributes خود یا با اجرای دستور git lfs untrack متوقف کنید.
مزایای Git LFS
هنگام کار با مخازنی که حاوی فایلهای صوتی، تصویری هستند (معروف به فایلهای باینری)، هرگونه تغییری که در آن فایلها ایجاد میشود، به همان روشی که فایلهای غیر باینری ردیابی میشوند، از طریق Git ردیابی نمیشوند. در حالی که Git برای ردیابی مجموعه های تغییرات در فایل های متنی کار بسیار خوبی انجام می دهد، تغییرات ایجاد شده در فایلهای باینری به عنوان یک کپی اضافی از فایل ردیابی می شوند. تصور کنید با یک تصویر باینری کار می کنید که 100 مگابایت در مخزن شما اشغال می کند و شما تغییری در آن فایل ایجاد می کنید.
اگر می خواهید کمی ریاضی سریع انجام دهید. چهار تغییر فایل در یک فایل باینری 100 مگابایتی باعث می شود که در مجموع 500 مگابایت استفاده شود (100 مگابایت فایل اصلی + 100 مگابایت فایل تغییر + 100 مگابایت فایل تغییر + 100 مگابایت فایل تغییر + 100 مگابایت فایل تغییر = 500 مگابایت).
از آنجا که این تغییرات به کنترل از راه دور شما نیز منتقل می شود، اندازه کنترل از راه دور شما نیز افزایش می یابد و سرعت کلون کردن، فشار دادن، کشیدن یا انجام عملیاتهای دیگر با مخزن را کاهش می دهد.
با Git LFS در زمان صرفه جویی کنید
هنگام استفاده از Git LFS، commit های شما به جای اشاره به فایل باینری به یک شی مرجع سبک وزن اشاره می کنند (شما در واقع فایل باینری اصلی را به یک مخزن LFS فشار می دهید). اکنون، هنگامی که مخزن LFS را شبیه سازی می کنید یا شعبه ای را در یک مخزن LFS بررسی می کنید، فقط نسخه فایل باینری را که نیاز دارید از سرور Git LFS بیرون می آورید و در فضا و زمان صرفه جویی می کنید.
چه نوع فایل هایی را باید در Git ذخیره کنید؟
از آنجایی که تیم شما با ویرایشگرها و ابزارها برای ایجاد و به روز رسانی فایل ها کار می کند، باید این فایل ها را در Git قرار دهید تا تیم شما از مزایای گردش کار Git بهره مند شود. انواع دیگر فایلها مانند DLL، فایلهای کتابخانه و دیگر وابستگی هایی که توسط تیم شما ایجاد نشدهاند، اما کد شما به مخزن شما بستگی دارد، متعهد نکنید.
این فایل ها را از طریق مدیریت بسته به سیستم های خود تحویل دهید. مدیریت بسته، وابستگیهای شما را بسته بندی میکند و هنگام استقرار بسته، فایلها را روی سیستم شما نصب میکند. بستهها برای اطمینان از اینکه کدهای آزمایششده در یک محیط، تا زمانی که بسته های نصبشده یکسانی دارند، در محیط دیگری یکسان اجرا می شوند، نسخه بندی می شوند.
ساخت پروژه در گیت هاب به نظر عموم کار سختی است، اما هرگز اینطور نیست با آموزش خوب تمام این مشکلات را کنار بزارید و ذهن خود را برای آموزش ها باز کنید و به ادامه آموزش ها گیت برسید.
منابع باینری کوچک و به ندرت به روز شده را در Git ذخیره کنید
فایلهای منبع باینری که بهندرت بهروزرسانی میشوند، نسخههای نسبتا کمی دارند و فضای زیادی را اشغال نمیکنند، مشروط بر اینکه اندازه فایلشان کوچک باشد. تصاویر برای وب، نمادها و سایر دارایی های هنری کوچکتر می توانند در این دسته قرار گیرند. بهتر است این فایلها را با بقیه منبع خود در Git ذخیره کنید تا تیم شما بتواند از گردش کار ثابت استفاده کند.
قفل کردن فایل های Git LFS
متاسفانه، هیچ راه آسانی برای حل تضادهای ادغام باینری وجود ندارد. با قفل کردن فایل LFS گیت، می توانید فایل ها را با پسوند یا نام فایل قفل کنید و از بازنویسی فایل های باینری در حین ادغام جلوگیری کنید.
برای استفاده از قابلیت قفل کردن فایل LFS، ابتدا باید به Git بگویید که کدام نوع فایل ها قابل قفل هستند. در مثال زیر، پرچم «–lockable» به دستور «git lfs track» اضافه می شود که هم فایل های PSD را در LFS ذخیره می کند و هم آنها را به عنوان قابل قفل علامتگذاری می کند.
استفاده از Git Large File Storage (LFS)
هنگامی که فایل های منبع با تفاوت های زیاد بین نسخه ها و به روز رسانی های مکرر دارید، می توانید از Git LFS برای مدیریت این نوع فایل ها استفاده کنید. Git LFS یک افزونه برای Git است که دادههایی را که فایلهای بزرگ را در یک commit توصیف میکنند به مخزن شما متعهد میکند و محتویات فایل باینری را در فضای ذخیرهسازی از راه دور جداگانه ذخیره میکند. وقتی در مخزن خود شبیه سازی می کنید و شاخه ها را تغییر می دهید، Git LFS نسخه صحیح را از آن حافظه راه دور دانلود می کند. ابزارهای توسعه محلی شما بهطور شفاف با فایلها کار میکنند که گویی مستقیماً به مخزن شما متعهد شدهاند.
محدودیت ها
Git LFS دارای اشکالاتی است که باید قبل از استفاده در نظر بگیرید:
- هر کلاینت Git که توسط تیم شما استفاده می شود باید کلاینت Git LFS را نصب کند و پیکربندی ردیابی آن را درک کند.
- اگر کلاینت Git LFS به درستی نصب و پیکربندی نشده باشد، وقتی مخزن خود را شبیه سازی می کنید، فایل های باینری که از طریق Git LFS انجام می شود را نخواهید دید. Git داده هایی را که فایل بزرگ را توصیف می کند (که Git LFS به مخزن متعهد می کند) و نه خود فایل باینری واقعی را دانلود می کند. انجام باینری های بزرگ بدون نصب کلاینت Git LFS، باینری را به مخزن شما منتقل می کند.
- Git نمیتواند تغییرات را از دو نسخه مختلف یک فایل باینری ادغام کند، حتی اگر هر دو نسخه یک والد مشترک داشته باشند. اگر دو نفر به طور همزمان روی یک فایل کار می کنند، باید با هم کار کنند تا تغییرات خود را تطبیق دهند تا از بازنویسی کار دیگری جلوگیری شود. Git LFS قفل فایل را برای کمک فراهم می کند.
درباره مدیریت
من عاشق برنامه نویسی و تکنولوژی هستم و 10 سال در این زمینه مشغول به فعالیت هستم و پروژه های مختلفی رو در زمینه های سایت و شبکه های کامپیوتری و امنیت اطلاعات انجام دادم و در حال حاضر مدیر و موسس شرکت انفورماتیک طراحی پایا آنوش هستم که در زمینه ی طراحی سایت و سیستم های هوشمند و برقراری امنیت اطلاعات سیستم های کامپیوتری و همچنین آموزش فعالیت دارد و میخواهم هر آنچه که در طی این 10 سال یاد گرفتم و تجربه کردم رو با شما به اشتراک بگذارم.
نوشته های بیشتر از مدیریت
دیدگاهتان را بنویسید