{"id":327493,"date":"2021-08-19T14:00:58","date_gmt":"2021-08-19T11:00:58","guid":{"rendered":"https:\/\/en.buradabiliyorum.com\/how-to-store-large-files-in-git-cloudsavvy-it\/"},"modified":"2021-08-19T14:00:58","modified_gmt":"2021-08-19T11:00:58","slug":"how-to-store-large-files-in-git-cloudsavvy-it","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/how-to-store-large-files-in-git-cloudsavvy-it\/","title":{"rendered":"#How to Store Large Files in Git \u2013 CloudSavvy IT"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a26bc5bb7ec2\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #dd3333;color:#dd3333\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #dd3333;color:#dd3333\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a26bc5bb7ec2\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-store-large-files-in-git-cloudsavvy-it\/#How_Git_Large_File_Storage_LFS_Works\" >How Git Large File Storage (LFS) Works<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-store-large-files-in-git-cloudsavvy-it\/#Where_Can_You_Use_Git_LFS\" >Where Can You Use Git LFS?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-store-large-files-in-git-cloudsavvy-it\/#Installing_And_Using_Git_LFS\" >Installing And Using Git LFS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-store-large-files-in-git-cloudsavvy-it\/#Migrating_to_Git_LFS\" >Migrating to Git LFS<\/a><\/li><\/ul><\/nav><\/div>\n<p><strong>&#8220;#How to Store Large Files in Git \u2013 CloudSavvy IT&#8221;<\/strong><\/p>\n<div id=\"article-content-area\">\n<img loading=\"lazy\" decoding=\"async\" class=\"type:primaryImage alignnone size-full wp-image-2248\" srcset=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2019\/10\/e713ed70.png?width=398&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1 400w, https:\/\/www.cloudsavvyit.com\/p\/uploads\/2019\/10\/e713ed70.png?width=1198&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1 1200w\" sizes=\"auto, 400w, 1200w\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2019\/10\/e713ed70.png?width=1198&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Git logo\" width=\"700\" height=\"299\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>Git, as well as services like Github, are built and optimized for lightweight text-based code files, and it\u2019s rare to see repositories larger than a few GB. But, it\u2019s often useful to track large files, and to make that easier, Git provides the\u00a0Large File Storage (LFS) extension.<\/p>\n<h2 role=\"heading\" aria-level=\"2\"><span class=\"ez-toc-section\" id=\"How_Git_Large_File_Storage_LFS_Works\"><\/span>How Git Large File Storage (LFS) Works<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Git doesn\u2019t technically have a maximum file size, but it starts to break down once you starting hitting a certain size of files. Github defines this maximum at 100 MB per repository.<\/p>\n<p>This soft limit comes down to the way Git stores data internally. Despite showing the user lists of changes, called diffs, Git actually uses a snapshot-based <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/download-scripts-themes-apps\/\" data-internallinksmanager029f6b8e52c=\"9\" title=\"Download Scripts &amp; Themes &amp; Apps\" target=\"_blank\" rel=\"noopener\">app<\/a>roach to storing data internally, and uses that to reconstruct the diffs, rather than the other way around.<\/p>\n<p>This is fine for small amounts of data, but it means that every time a file is modified, a snapshot must be made, and so if the file is very large, it can quickly take up a lot of room. Git manages this a bit internally with \u201cpackfiles,\u201d which can do some garbage collection, but the problem of working with large files still remains.<\/p>\n<p>So, a solution called <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/git-lfs.github.com\/\">Git Large File Storage (LFS)<\/a> was made. Basically, rather than storing the actual file in the repository, Git LFS simply stores a pointer to where that file actually is. When your Git client wants to clone a repository, or checkout the file, it downloads it from Git LFS instead.<\/p>\n<p>This means that you\u2019ll no longer need to download every versioned object just to clone the repo. LFS makes it much faster to get the repository up and running because Git only cares about the pointer, which is small, and only fetches the data it needs.<\/p>\n<p>The main downside is that you now cannot use packfiles, which means you\u2019re going to need extra storage for each and every copy of a file. But, with LFS allowing you to have a massive repository with optimal clone times, this doesn\u2019t affect the developer experience.<\/p>\n<h2 role=\"heading\" aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Where_Can_You_Use_Git_LFS\"><\/span>Where Can You Use Git LFS?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>To use it, you\u2019ll need a server configured to use Git LFS. It\u2019s just an extension of Git, so you don\u2019t need to install any extra software or set up servers to handle data storage.<\/p>\n<p>Github has support for Git LFS, but only allows 10 GB per repository. This applies to normal repos as well as LFS repos. However, it\u2019s pretty easy to purchase more data from Settings &gt; Billing, and 50 GB is only an extra $4.20 a month:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-13853\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2021\/08\/fd411e22.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" width=\"1040\" height=\"489\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>You\u2019ll need to pay for bandwidth too, since updating large files makes a copy of the file and must send the whole thing.<\/p>\n<p>If you\u2019d like to host particularly large repositories, and want to do it on your own hardware, we recommend using self-hosted Gitlab. You can read our guide on setting up a personal Gitlab instance to learn more.<\/p>\n<p><strong>RELATED:<\/strong> <strong><em>How To Set Up a Personal Gitlab Server<\/em><\/strong><\/p>\n<h2 role=\"heading\" aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Installing_And_Using_Git_LFS\"><\/span>Installing And Using Git LFS<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>You\u2019ll need to <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/git-lfs.github.com\/\">download and install Git LFS from their website<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-13854\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2021\/08\/7a829e2b.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" width=\"1200\" height=\"433\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>Then, open Git, or Git Bash on Windows, and run the install command to verify that it\u2019s working:<\/p>\n<pre>git lfs install<\/pre>\n<p>Git LFS works a bit separately from Git itself. It doesn\u2019t automatically track files above a certain size; you\u2019ll need to manually add files to Git LFS to start using it. You can use wildcard syntax for this:<\/p>\n<pre>git lfs track \"*.dat\"<\/pre>\n<p>You can use <code>ls-files<\/code>\u00a0and <code>status<\/code>\u00a0to view the state of the Git LFS subsystem itself:<\/p>\n<pre>git lfs ls-files&#13;\ngit lfs status<\/pre>\n<h2 role=\"heading\" aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Migrating_to_Git_LFS\"><\/span>Migrating to Git LFS<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>If you\u2019re coming from an existing Git repository, or accidentally committed something without first tracking it in Git LFS, you\u2019ll need to use the <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/git-lfs\/git-lfs\/wiki\/Tutorial#migrating-existing-repository-data-to-lfs\"><code>migrate<\/code>\u00a0tool<\/a> to move data to LFS.<\/p>\n<p>For example, importing all existing files matching a wildcard:<\/p>\n<pre>git lfs migrate import --include=\"*.mp4\"<\/pre>\n<p>Or just sending everything to LFS:<\/p>\n<pre>git lfs migrate import --everything<\/pre>\n<p>You may need to do <code>git push --force<\/code>\u00a0to overwrite branch history.\n<\/div>\n<blockquote><p><strong><span style=\"color: #ff6600;\">If you liked the article, do not forget to share it with your friends. Follow us on\u00a0<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/news.google.com\/publications\/CAAqBwgKMLG0nwswvr63Aw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Google News<\/a><\/span>\u00a0too, click on the star and choose us from your favorites.<\/span><\/strong><\/p><\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\">For forums sites go to <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/forum.buradabiliyorum.com\/\" target=\"_blank\" rel=\"noopener\">Forum.BuradaBiliyorum.Com<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\"><strong>If you want to read more like this article, you can visit our <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/en.buradabiliyorum.com\/technology\/\" target=\"_blank\" rel=\"noopener\">Technology category.<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<p><span style=\"color: black;\"><a style=\"color: #ff9900;\" href=\"https:\/\/www.cloudsavvyit.com\/13830\/how-to-store-large-files-in-git\/\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;#How to Store Large Files in Git \u2013 CloudSavvy IT&#8221; Git, as well as services like Github, are built and optimized for lightweight text-based code files, and it\u2019s rare to see repositories larger than a few GB. But, it\u2019s often useful to track large files, and to make that easier, Git provides the\u00a0Large File Storage&#8230;<\/p>\n","protected":false},"author":1,"featured_media":327494,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2019\/10\/e713ed70.png","fifu_image_alt":"","footnotes":""},"categories":[18],"tags":[],"class_list":["post-327493","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/327493","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/comments?post=327493"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/327493\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media\/327494"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=327493"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=327493"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=327493"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}