I'd rather believe that submodules are fixed at some point or an alternative solution appears that works much better. Git subtree is around for a while and there's also Git X-Modules https://gitmodules.com which is modules on the Git server.
It is a pile of garbage, but it's better than nothing.
Also, deep learning training data often consists of large image files, and can also be considered "source code", and in any case it can be very useful to put these under version control.
And finally it can be useful to put external dependencies as tar-files into your source tree.
For writing tests in a deep learning code base, rather than simply including a native data file (image, CSV, whatever), I've taken to writing a fake data creator class. It always feels like overkill when an alternative solution is including a native data file or two that already exists.
LFS uses some sort of internal filtering and tracking to determine which binary files might have changed. It seems to have trouble deciding if there are actually dirty files that need changed. So you can't just say, "Okay, go find all the binary files that didn't actually get moved to LFS and correct them"
Instead you end up with random moments where you want to commit a single file and git instead detects 1000 png files that it absolutely could not go on without doing something about.
But then the diff is a disaster so good luck understanding that what it is actually mad about is that it wants to move the files into LFS. The only way I finally figured it out was to manually load the object blob and notice one of them was an LFS pointer file.
I personally think git annex handles things more elegantly, but lfs won that battle.
could you elaborate?
* Changing from a subdirectory to a submodule breaks lots of things like git reset and git bisect.
* Having to remember to git module init, update etc. I always have to look up the commands and never remember what the difference is.
* I don't care that there are unlisted files in a submodule, either don't bug me about this in status, or integrate commands in such a way that they work transparently across the main module and submodule.
* Related to the previous: Coordinating a single logical change across submodules involves several manual steps and has plenty of scope to go wrong.
- An edit in .gitmodules
- An edit in .git/config
- A removal in .git/modules (seriously?)
https://stackoverflow.com/questions/1260748/how-do-i-remove-...
And that's the only issue you had with them?