Live data from Hacker News

Announcing Git Large File Storage

github.com

81–90 of 167 posts

Re: Announcing Git Large File Storage

#81
> Every user and organization on GitHub.com with Git LFS enabled will begin with 1 GB of free file storage and a monthly bandwidth quota of 1 GB.

A GB doesn't get you very far if you are working with raw audio and video.

Does it make sense to think about storing virtual machines images (.vmdk) in git on GitHub with LFS?

Re: Announcing Git Large File Storage

#82
post #79
post #72

It's interesting that this uses smudge/clean filters. When I considered using those for git-annex, I noticed that the smudge and clean filters both had to consume the entire content of the file from stdin. Which means that eg, git status will need to feed all the large files in your work tree into git-lfs's smudge filter. I'm interested to see how this scales. My feeling when I looked at it was that it was not suffic…

Also, is there any reason Git LFS can't be used as a special remote for git-annex? It would provide an easy way for people to host their git-annex repos entirely on GitHub.

Yeah, git-annex is very interested in having a special remote for everything and anything. And if someone creates 4 shell commands, I could have a demo working in half an hour. The commands would be:

  lfs-get SHA256 > file
  lfs-store SHA256 
Presumably the right way would be to use their http api, but these 4 commands seem generally useful to have anyway.

Re: Announcing Git Large File Storage

#83

Earlier quoted context omitted.

> (Not a git-annex user here) You could at least read the examples on the git-annex page[1] before passing judgement that the use cases are at all different (they're not). Instead of using a new 'lfs' command that ties you to GitHub, you use an 'annex' command (along with a few others). Git-annex does just fine "keeping track of larger objects inside your git project efficiently", and is no more divorced from your no…

I did read the use cases and the main pitch. I guess these don't highlight very well how it actually functions. Can I do "git add large.mp4 && git commit" the way I do now?

Yes, you can. That's one other advantage over git-annex (albeit slight).

The documentation lays out the workflow: https://help.github.com/articles/configuring-large-file-stor...

As does the website: https://git-lfs.github.com/ (see: "Getting Started")

Re: Announcing Git Large File Storage

#84
post #53

So does this mean the large files are actually versioned?

From how I read it, it sounds like a little of yes and no... it's similar to git's way but I am not sure if they are really going to keep versions of all of the old large files... I guess if they are going to be fully reverse compatible like being able to go backwards in git you have to...

Re: Announcing Git Large File Storage

#85
post #67

Earlier quoted context omitted.

You basically trade the ability to have diffs (nearly meaningless on binary files anyway) for representing large files as their SHA-256 equivalent values on a remote server. That's exactly what git-annex does. Except it can host on your own servers, or S3, or Tahoe-LAFS, or rsync.net, etc. And it's free software. And it supports multiple servers for the same repo, so you have redundancy. Adding an S3 remote is just s…

Indeed similar to git-annex, why does GitHub not support that? With GitLab we added support for that recently and it was pretty easy to do. Anyway, interesting that linking to sha's is becoming the default solution. Looking forward to playing with this and comparing the solutions.

Because they are going to charge for LFS, I suspect. Just as they don't support private repos for free, either.

Re: Announcing Git Large File Storage

#86
I'm sure GitHub did their due diligence before starting to work on this, but I can't lie: it bums me out a bit that they didn't find git-bigstore [1] (a project I wrote about 2 years ago) before they started, since it works in almost the exact same way. Three-line pointer files, smudge and clean filters, use of .gitattributes for which files to sync, and remote service integration.

Compare "Git Large File Storage"'s file spec:

    version https://git-lfs.github.com/spec/v1
    oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
    size 12345
And bigstore's:

    bigstore
    sha256
    96e31e44688cee1b0a56922aff173f7fd900440f
Bigstore has the added benefit of keeping track of file upload / download history _entirely in Git_, using Git notes (an otherwise not-so-useful feature). Additionally, Bigstore is also _not_ tied to any specific service. There are built-in hooks to Amazon S3, Google Cloud Storage, and Rackspace.

Congrats to GitHub, but this leaves a sour taste in my mouth. FWIW, contributions are still welcome! And I hope there is still a future for bigstore.

[1]: https://github.com/lionheart/git-bigstore

Re: Announcing Git Large File Storage

#87
post #64

Does this mean gamedevs might start droping Perforce for this? If its not too expensive maybe?

Most developers I know dropped Perforce for git and svn a long time ago. Configure them with the appropriate ignores and it works fine.

This hasn't been my experience working in AAA console games, although I could definitely see it being the case in mobile. What developers do you know?

Re: Announcing Git Large File Storage

#88
post #72

It's interesting that this uses smudge/clean filters. When I considered using those for git-annex, I noticed that the smudge and clean filters both had to consume the entire content of the file from stdin. Which means that eg, git status will need to feed all the large files in your work tree into git-lfs's smudge filter. I'm interested to see how this scales. My feeling when I looked at it was that it was not suffic…

As the author of git-fat, I have to say the smudge/clean filter approach is a hack for large files and the performance is not good for a lot of use cases. The reality is that it's common to need fine-grained control over what files are really present in the repository, when they are cached locally, and when they are fetched over the network. Git-annex does better than the smudge/clean tools (git-fat, git-media, git-lfs) but at somewhat increased complexity. I think our tools have stepped over the line of "as simple as possible but no simpler" and cut ourselves off from a lot of use cases. Unfortunately, it's hard for people to evaluate whether these tools are a good fit now and in a couple years.

As for git-lfs relative to git-fat: (1) the Go implementation is probably sensible because Python startup time is very slow, (2) git-lfs needs server-side support so administration and security is more complicated, (3) git-lfs appears to be quite opinionated about when files are transferred and inflated in the working tree. The last point may severely limit ability to work offline/on slow networks and may cause interactive response time to be unacceptable. Some details of the implementation are different and I'd be curious to see performance comparisons among all of our tools.

Re: Announcing Git Large File Storage

#89
post #30
post #18

Has someone had a closer look and can say how this compares to Git-Annex?

This and git-annex (and git-fat and others) use the same basic architecture of storing links in Git and schlepping the binaries around separately. Git-annex renames binaries with their SHA256 hashes, puts them in a .git/annex/ dir, and replaces files in the working dir with symlinks. Git-LFS seems to use small metadata pointer files (SHA256 hash, file size, git-lfs version) instead of symlinks. Not sure whether the f…

The lack of location tracking looks like the most significant difference to me. While the git-lfs documentation does mention that different git remotes can have different LFS endpoints configured, all git-lfs knows about a file is its SHA256. So how can it tell which remote to download the file from? The best it could do is try different remotes until it finds one that has the file.

I hesitate to say this means git-lfs is not distributed at all, but it seems significantly less distributed than git-annex, which can keep track of files that might be in Glacier, or on an offline drive, or a repo cloned on a nearby computer, and so can be used in a more peer-to-peer fashion when storing and retrieving the large files.

Re: Announcing Git Large File Storage

#90
post #16

So basically it's git-annex, but tied to GitHub. http://git-annex.branchable.com/

Yeah, that was exactly my feeling. "Not invented here" much?

they are trying to make a service. If you are making a product you generally want to be in control of its core parts.
Post reply on HN