Git Large File Storage (LFS)

Git LFS is an add-on module to git which allows git repositories to efficiently handle large data files, as well as provide the locking mechanism to facilitate workflows that avoid multiple people from trying to edit non-mergeable files at the same time

All WVS projects are LFS enabled by default and Git LFS is an integral part of the WVS ecosystem.

Files tracked by Git LFS display an icon to indicate if the file is stored using LFS.

Requirements

  • A client compatible with Git LFS version 1.0.1 or higher must be used. All WVS clients are compatible. Recent versions of all major git clients such as SourceTree, Git Kraken, GitHub desktop, etc. are compatible.

Known limitations when using a non-WVS client

  • Git LFS v1 original API is not supported.
  • When SSH is set as a remote, Git LFS objects still go through HTTPS.
  • Any Git LFS request asks for HTTPS credentials, so we recommend using a Git credentials store.

LFS objects in project archives

When creating project archives, WVS includes all items managed by Git LFS in the archive.

Troubleshooting

Encountered n file(s) that should have been pointers, but weren’t

This error indicates the file (or files) are expected to be tracked by LFS, but for some reason the repository is not tracking them as LFS. There are many reasons why this can happen, but the two most common are:

  • Users with mis-configured git clients checking into the repository
  • LFS settings changed after files were already checked into the repository

Often these errors/warnings refer to events deep in the history of the repository and can be ignored. However, since the errors do not give you an indication of when the problem happened, it is best to fix the issue so that if new errors do show up subsequently you know that it is an ongoing problem that must be addressed.

To resolve the problem, migrate the affected file (or files) and push back to the repository. This procedure should only be done by a git savvy user as each situation is unique:

  1. Migrate the file to LFS:

    git lfs migrate import --yes --no-rewrite "<your-file>"
    
  2. Push back to your repository:

    git push
    
  3. Optional. Clean up your .git folder:

    git reflog expire --expire-unreachable=now --all
    git gc --prune=now