I'm trying to add everything under MyProject/Frameworks/
to git-lfs (large file storage). I'm not sure what the proper format for matching all files and folders recursively under the Frameworks
folder is. This answer says the proper format is git lfs track "MyProject/Frameworks/**"
, but Atlassian's help document says I should use git lfs track "MyProject/Frameworks/"
. I tried both and they didn't use git lfs
for storage. It tried uploading files directly.
Sure, I'd love to know the proper format, but more importantly, before I attempt to push my changes to github, I'd like to verify that the match and files do indeed work correctly. This'll allow me to iterate and try new things.
I see two related commands that might help: git lfs status
and git lfs ls-files
. It's not clear which one I should be using and what output I should be looking for. For example, when I ran git lfs status
, it showed me a ton of files under Git LFS objects to be committed
, making me think they would be added to Git LFS. However, after attempting to push to GitHub.com, I realized that it was clearly not the case. If it helps, the output for these files always had something like (Git: edee1ad)
after each file name.
When I attempt to use git lfs ls-files
I'm not sure if I need to run it after git add
ing the files, after committing them, or after pushing them. Most of the time it's just showing me blank output.
Essentially the question is: If I configured git lfs
correctly, what tool (e.g. git lfs status
) should I use, and what output should I look for before I attempt to commit/push?
Note: Please don't answer the question with only how to match all recursive files as that will help me once (this specific case), rather than allowing me to iterate and try new things (any case).
TL;DR
If everything is set up correctly, you can verify that git LFS is going to work properly by:
git add
the file(s) in question.git lfs status
and ensure the file(s) in question appear underGit LFS objects to be committed
, and that they have theLFS
value in parenthesis; orgit lfs ls-files
and ensure the file(s) in question appear in this output.Also, for the record, looks like
git lfs track "MyProject/Frameworks/**"
is the correct one for recursive matching.Set up and testing methodology:
git lfs track "*.lfs"
. This generates.gitattributes
. Leave it unstaged.Test.lfs
. Leave it unstaged.Test:
git lfs status
: no filenames outputgit lfs ls-files
: no outputAdd
git add Test.lfs
.Test:
git lfs status
:Test.lfs
will now be listed with anLFS
suffix.git lfs ls-files
:Test.lfs
will now be listed.Commit changes.
Test:
git lfs status
:Test.lfs
will move to the "to be pushed" section. It will have a suffix such with a bunch of numbers/letters.git lfs ls-files
:Test.lfs
will continue to be listed.Test:
git lfs status
: no filenames output anymoregit lfs ls-files
: Continues to output the tracked fileConclusions:
Git LFS objects not staged for commit
section seems misleading as it never displayed any files, even those that should have been tracked by LFS.Git LFS objects to be committed
incorrectly. It is not a Git LFS object. The way you can tell that it's not actually a Git LFS object though is to look at how it ends. If it ends with(Git: 111111111)
it won't be committed to LFS.git lfs ls-files
overgit lfs status
to determine if something is going to be part of git-lfs or not.git add
files in a weird way causing what should have been clear matches to not be considered for Git LFS. The solution is to unstage the files and then re-stage them.