Git is cool, for reasons I won't go into here.
It doesn't deal very well with very large files, but that's fine; when
using things like git-annex
or git-lfs
, it's possible to deal with
very large files.
But what if you've added a file to git-lfs
which didn't need to be
there? Let's say you installed git-lfs and told it to track all *.zip
files, but then it turned out that some of those files were really
small, and that the extra overhead of tracking them in git-lfs
is
causing a lot of grief with your users. What do you do now?
With git-annex
, the solution is simple: you just run git annex
unannex <filename>
, and you're done. You may also need to tell the
assistant to no longer automatically add that file to the annex, but
beyond that, all is well.
With git-lfs
, this works slightly differently. It's not much more
complicated, but it's not documented in the man page. The naive way to
do that would be to just run git lfs untrack
; but when I tried that it
didn't work. Instead, I found that the following does work:
- First, edit your
.gitattributes
files, so that the file which was (erroneously) added togit-lfs
is no longer matched against agit-lfs
rule in your.gitattributes
. - Next, run
git rm --cached <file>
. This will tell git to mark the file as removed from git, but crucially, will retain the file in the working directory. Dropping the--cached
will cause you to lose those files, so don't do that. - Finally, run
git add <file>
. This will cause git to add the file to the index again; but as it's now no longer being smudged up bygit-lfs
, it will be committed as the normal file that it's supposed to be.