- Understand how Git LFS works with forks
- Known limitations
- Add a file with Git LFS
- Stop tracking a file with Git LFS
- Configure Git LFS on your server
- Enable or disable Git LFS for a project
- Clone a repository that uses Git LFS
- Migrate an existing repository to Git LFS
- Related topics
- Troubleshooting
Git Large File Storage (LFS)
Git Large File Storage (LFS) helps Git repositories manage large binary files efficiently. When you add a file to your repository using Git LFS, GitLab:
- Places the file in your project’s configured object storage, instead of the Git repository.
- Adds a pointer in your Git repository, instead of the large file. This small file tells Git where to find the full version of the file.
- Queues a job to recalculate your project’s statistics, including storage size and LFS object storage. Your LFS object storage is the sum of the size of all LFS objects associated with your repository.
Files managed with Git LFS show a LFS badge next to the filename:
Your Git repository remains smaller, which helps you adhere to repository size limits. For more information, see repository size limits for self-managed and for GitLab.com.
Git LFS clients use HTTP Basic authentication, and communicate with your server over HTTPS. After you authenticate the request, the Git LFS client receives instructions on where to fetch (or push) the large file.
Understand how Git LFS works with forks
When you fork a repository, your fork includes the upstream repository’s existing LFS objects that existed at the time of your fork. If you add new LFS objects to your fork, they belong to only your fork, and not the upstream repository. The total object storage increases only for your fork.
When you create a merge request from your fork back to the upstream project, and your merge request contains a new Git LFS object, GitLab associates the new LFS object with the upstream project after merge.
Known limitations
- The Git LFS original v1 API is unsupported.
- Even when Git communicates with the repository over SSH, Git LFS objects still use HTTPS.
- Git LFS requests use HTTPS credentials, which means:
- You should use a good Git credentials store.
- If your GitLab server uses HTTP instead, you must add the URL to Git configuration manually.
- Group wikis do not support Git LFS.
Add a file with Git LFS
Prerequisites:
- You have downloaded and installed the appropriate version of the CLI extension for Git LFS for your operating system.
- You have installed the Git LFS pre-push hook by running
git lfs install
in the root directory of your repository.
To add a large file into your Git repository and track it with Git LFS:
-
To track all files of a certain type with Git LFS, rather than a single file, run this command, replacing
iso
with your desired file type:git lfs track "*.iso"
This command creates a
.gitattributes
file with instructions to handle all ISO files with Git LFS. - Add a file of that type (
.iso
) to your repository. -
Tell Git to track the changes to both the
.gitattributes
file and the.iso
file:git add .
- To ensure you’ve added both files, run
git status
. If the.gitattributes
file isn’t included in your commit, users who clone your repository don’t get the files they need. -
Commit both files to your local copy of your repository:
git commit -am "Add an ISO file and .gitattributes"
-
Push your changes back upstream, replacing
main
with the name of your branch:git push origin main
Make sure the files you are changing aren’t listed in a
.gitignore
file. If this file (or all files of this type) is in your.gitignore
file, Git commits the change locally, but does not push it to your upstream repository. - Create your merge request.
Stop tracking a file with Git LFS
Prerequisites:
- You have downloaded and installed the appropriate version of the CLI extension for Git LFS for your operating system.
- You have installed the Git LFS pre-push hook by running
git lfs install
in the root directory of your repository.
To stop tracking a single file in Git LFS:
-
Run the
git lfs untrack
command and provide the path to the file:git lfs untrack doc/example.iso
-
Push your changes, create a merge request, and merge the merge request.
If you delete an object (example.iso
) tracked by Git LFS, but don’t use
the git lfs untrack
command, example.iso
shows as modified
in git status
.
Stop tracking all files of a single type
Prerequisites:
- You have downloaded and installed the appropriate version of the CLI extension for Git LFS for your operating system.
- You have installed the Git LFS pre-push hook by running
git lfs install
in the root directory of your repository.
To stop tracking all files of a particular type in Git LFS:
-
Run the
git lfs untrack
command and provide the file type to stop tracking:git lfs untrack "*.iso"
-
Push your changes, create a merge request, and merge the merge request.
Configure Git LFS on your server
Git LFS is enabled by default for both self-managed instances and GitLab.com. To configure it, such as setting up remote object storage, see GitLab Git Large File Storage (LFS) Administration.
Enable or disable Git LFS for a project
Git LFS is enabled by default for both self-managed instances and GitLab.com.
Prerequisites:
- You must have at least the Developer role in the project.
To enable or disable Git LFS at the project level:
- On the left sidebar, select Search or go to and find your project.
- Select Settings > General.
- Expand the Visibility, project features, permissions section.
- Select the Git Large File Storage (LFS) toggle.
- Select Save changes.
Clone a repository that uses Git LFS
When you clone a repository that uses Git LFS, Git detects the LFS-tracked files
and clones them over HTTPS. If you run git clone
with a SSH URL, like
user@hostname.com:group/project.git
, must enter your GitLab credentials again for HTTPS
authentication.
Update your local clone of LFS objects
If you have already cloned a repository that uses Git LFS, and want to fetch new LFS objects from the upstream repository, run:
git lfs fetch origin main
Migrate an existing repository to Git LFS
Read the git-lfs-migrate
documentation
on how to migrate an existing Git repository with Git LFS.
Related topics
- Use Git LFS to set up exclusive file locks.
- Blog post: Getting started with Git LFS
- Git LFS developer information
- GitLab Git Large File Storage (LFS) Administration for self-managed instances
- Troubleshooting Git LFS
Troubleshooting
Reduce repository size after removing large files
If you need to remove large files from your repository’s history, to reduce the total size of your repository, see Reduce repository size.