Skip to content

Instantly share code, notes, and snippets.

@everttrollip
Last active March 13, 2024 08:46
  • Star 29 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save everttrollip/198ed9a09bba45d2663ccac99e662201 to your computer and use it in GitHub Desktop.
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

@anthonypena97
Copy link

anthonypena97 commented Mar 2, 2022

This really helped point the way! Thank you!

@strickvl
Copy link

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

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.

@tigerhawkvok
Copy link

Created a Python script to do this:

https://gist.github.com/tigerhawkvok/adb7905a2423312f237da1953d6a8eeb

Should work on all platforms (including Windows), and can generate a dry-run script for you to inspect. (Note the dry-run script won't actually edit your .gitattributes or your .git/lfs folder, it'll just show you the new contents of .gitattributes and verify the to-be-removed path)

@inyourface34456
Copy link

How do I fix this error:

E: Conflicting values set for option Signed-By regarding source https://packagecloud.io/github/git-lfs/ubuntu/ focal: /usr/share/keyrings/gitlfs-archive-keyring.gpg != /etc/apt/keyrings/github_git-lfs-archive-keyring.gpg
E: The list of sources could not be read.
E: Conflicting values set for option Signed-By regarding source https://packagecloud.io/github/git-lfs/ubuntu/ focal: /usr/share/keyrings/gitlfs-archive-keyring.gpg != /etc/apt/keyrings/github_git-lfs-archive-keyring.gpg
E: The list of sources could not be read.

This was caused after I ran the install script (obtained using curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash). I need to use apt again, and I do not know how to fix it.

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