Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Removing git lfs from (any) repository

So, it has been an interesting journey, but time to remove git-lfs. Here follows a summary of the approach I used to safely remove git-lfs,

  • commit & push everything
  • create a branch, something like fix/remove-lfs
  • remove hooks git lfs uninstall
  • remove lfs stuff from .gitattributes (open file, delete content - don't delete the file!)
  • list all lfs files, git lfs ls-files
  • run git rm --cached for each file
    • if your list is big, copy the contents into a file.txt
    • make sure you remove the number and asterik on each line, you only want the paths to the files
    • while read line; do git rm --cached "$line"; done < files.txt
  • run git add for each file
    • if you have a file.txt
    • while read line; do git add "$line"; done < files.txt
  • run a git status and make sure all the files were added properly
  • commit everything
git add .gitattributes
git commit -m "unlfs"
git push
  • check that no lfs files left with git lfs ls-files
  • remove any lfs, rm -rf .git/lfs

Once your branch (fix/remove-lfs) is merged into develop, your team doesn't need to do anything other than simply pulling and checking out the new state of the world, their repository will work as-expected without git lfs installed. If git lfs is still installed, simply let them uninstall it: git lfs uninstall

Credits: Fedor, Taylor, Chase, Simon

@danisztls
Copy link

danisztls commented May 11, 2021

@pavelsolis Yes, AFAIK. It had two typos, which I fixed. But make a backup beforehand if possible. You can copy the dir and if things go wrong, delete the messy one and rename the copy.

@pavelsolis
Copy link

pavelsolis commented May 11, 2021

Thanks! I tried it as git-lfs and git lfs, in both cases the output was 'lfs' is not a git command. Instead of installing lfs, what worked was to remove .git/lfs and .git/hooks/pre-push.

@danisztls
Copy link

danisztls commented May 12, 2021

You must have it installed to run it. But all git-lfs uninstall --local does is remove .git/hooks/pre-push. I think it will create problems if you didn't do the re-normalize stuff as you will have pointers to stuff that does not exist anymore. After pushing to origin, have you tried to clone the repo and see if things are alright?

@nishalsach
Copy link

nishalsach commented Aug 11, 2021

Hi, I tried doing this from top to bottom, and I think I messed something up: I removed Git LFS, but I still have pointers instead of the original files. I'm not really sure how to fix this. git lfs ls-files returns nothing, which I guess means LFS isn't tracking these files anymore. Does that mean my data is gone forever and I have pointers to nothing?

@anthonypena97
Copy link

anthonypena97 commented Mar 2, 2022

This really helped point the way! Thank you!

@strickvl
Copy link

strickvl commented May 11, 2022

Just to add to this, if you are tracking a ton of files, the following little Python script will create a new filenames.txt that that removes the number and asterisk from each line:

with open("filenames.txt", "w") as f:
    f.write("")

with open("files.txt", "r") as f2:
    for line in f2:
        with open("filenames.txt", "a") as f:
            f.write(line.split(" ")[-1])

@TheDragonNidhogg
Copy link

TheDragonNidhogg commented May 22, 2022

Thank you so much for your help. I have been trying to do this for over a week and your guide finally let get rid of lfs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment