Git LFS support

@rtyley rtyley released this Sep 4, 2015 · 59 commits to master since this release

You can now use the BFG to convert an existing Git repository to the Git LFS format - so all your huge files can be extracted and safely replaced with Git LFS pointer files throughout your repository history. The new command line option is --convert-to-git-lfs, and you give it a glob expression, like *.wav, just like you do with git lfs track:

$ java -jar ~/bfg-1.12.5.jar --convert-to-git-lfs '*.wav' --no-blob-protection

This will reduce the size of your core Git repo, while still keeping those files readily available in the secondary Git LFS store.

A full step-by-step example of doing this on the command line:

$ git clone --mirror heavy-repo # a 'bare' repo, with all branches and tags
$ cd heavy-repo.git # Now is a good time to make a backup!

$ java -jar ~/bfg-1.12.5.jar --convert-to-git-lfs '*.wav' --no-blob-protection
# the BFG rewrites history, extracting files to lfs/objects and adding .gitattributes for LFS tracking
$ git reflog expire --expire=now --all && git gc --prune=now
$ git lfs init

# let's push everything up to your Git LFS-enabled hosting provider:
$ git remote set-url origin
$ git push # because you cloned using --mirror, this will push ALL branches and tags

You want to be using a least Git LFS 1.0.0 or above (which includes some recent changes to improve pushing from bare repos).