14

I would like to have a git repository that consists mainly of binary files.

I need to keep track of the changed, added and removed files to the repository, but I don't want for git to version the content of the files themselves.

In other words, I just need for git to keep track of changes (change log), but not the content.

Is this even possible with git?

Should I be using something else for this?

4
  • Why don't you want the content to be tracked specifically? Commented Jan 31, 2011 at 11:46
  • 3
    I don't know what @Dema's reasons are, but git-annex describes two use cases for this: git-annex.branchable.com Commented Apr 21, 2011 at 22:26
  • This is a dupe of stackoverflow.com/questions/540535/… Commented Feb 26, 2013 at 22:04
  • Since April 2015, you can consider git-lts. See my answer below Commented Apr 9, 2015 at 5:59

5 Answers 5

13

Mined from @Tobu's answer to this related question:

To version and propagate binary files without actually storing them in git, try git-annex.

Sign up to request clarification or add additional context in comments.

Comments

11

git is a content tracker, so if you don't want to track content it sounds like it's the wrong tool for the job. I'm not sure exactly how you would track changes to files without tracking their content, though.

4 Comments

I disagree that it's the wrong tool; git is also a user space file system with many "plumbing" commands available so it can be used in novel ways beyond version control of content
I'm facing a similar problem... do you have any suggestions to the "right" tool for tracking many binary files?
-1 for toolbear. Git is not for tracking binary files (in its straight use )... and what is that "user space file system" ????
It's said by git itself in their own documentation: git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F in the chapter "What is git". It says "This makes Git more like a mini filesystem with some incredibly powerful tools built on top of it, rather than simply a VCS."
2

If you don't want to store the bins, than you could use a binary diff tool on the files, then commit the output into version control. Any text change log entries can then be entered in to the commit message.

Comments

2

but I don't want for git to version the content of the files themselves.

That is exactly what Git Large File Storage (LFS) does (by GitHub, April 2015).

The project is git-lfs (see git-lfs.github.com) and a tested with server supporting it: lfs-test-server:
You can store metadata only in the git repo, and the large file elsewhere.

https://cloud.githubusercontent.com/assets/1319791/7051226/c4570828-ddf4-11e4-87eb-8fc165e5ece4.gif

  • Large files are synced separately to a configurable Git LFS server over HTTPS, so you are not limited in where you push your Git repository.

  • Large files are only synced from the server when they are checked out, so your local repository doesn't carry the weight of every version of every file when it is not needed.

  • The meta data stored in Git is extensible for future use. It currently includes a hash of the contents of the file, and the file size so clients can display a progress bar while downloading or opt out of a large download.

Comments

1

Maybe I don't understand your question but what if you store in a text file the timestamp of all files? Then, you could store in version control only that file, and let your VCS diff the different versions of it.

1 Comment

This would not guarantee the integrity of the files or their versions upon checkout.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.