Is Git what I need for my project?

Hey People of Github,

I’m still learning the ins and out of using Git in projects. I’m on a student animation project in which we’re going to be making several 3D animated shorts. Often one file will link to another. In order to work non-destructively, we always save incrementally, but this ends up with us having 100+ versions of the same file, and having to relink things everytime a new file is made.

For this project I want a way to still be able to revert to older versions without having to have hundreds of files. Git seems perfect for this application, but getting into the particulars has made me question that a bit, so I was hoping I could get a straight answer here.

  • First off it seems Git is build to keep track of versions of the whole project, rather than versions of individual files within that project. Since in our case the project won’t really be versioned in it’s entirety, I’m unsure if it’s fit for my use case.
  • I also want to set it up in a way that puts as little strain on the artists as possible. It seems that Git wants to have a human tell it what to do, with very little automation, and I don’t want to interrupt their workflow like that. Especially since they’ll be saving their work hundreds of times per file.

So, Is Git suited for this and have I just not quite understood it yet, or should I save myself the time and look for a different solution?

Thank you.

Thanks for the detailed description of what you’re trying to do. While I can’t definitively say that Git is appropriate for your needs, I can at least answer your questions and point out what I think might be a further concern.

You are correct that Git operates at the level of a project, a “repository” in Git parlance. The repository is typically defined as a given directory and everything underneath it. There are exceptions to this though. One is that specific contents in the repository can be “ignored” by Git. In the case of a code project, the things that typically get ignored are files that are generated by tools from source files that are not ignored, also known as “tracked”. But you could use the ignore function in a different way. Additionally, through file system symlinks, you could keep the repository someplace else and explicitly link into the repository the files you want tracked. So at least this limitation is probably surmountable depending on how your workflow works.

Your understanding of how Git wants a human to tell it what to do is correct, but not the whole picture. Git is essentially designed as what I like to describe as a “workflow toolkit”. It is designed in this way to create a very unopinionated set of tools that can be used to support whatever kind of development workflow can be imagined. Unfortunately, this also makes using Git for the beginner extremely complex and difficult to get started with. But , this also means that it is designed to be composed into more opinionated and specialized workflows for whatever application can be imagined. Because of this, it is also designed to be automated by calling Git from other languages or tools, so I have the greatest confidence that a higher-level workflow could be built for your artists that made it much more simple to work with.

On the other hand, one limitation of Git is that it is designed to work primarily with text files, preferably smallish text files. It is much less efficient dealing with large files and especially so with large, binary files such as are often used in game development or possibly 3D animation work such as you’re describing. It’s specifically for this reason that Git LFS (LFS is an initialism for “Large File Storage”) was designed and built. So you may want to take a look at Git LFS and decide if it is appropriate for your needs, if indeed I am correct in assuming that your 3D animation work generates large binary assets rather than text files.

I hope that helps!

1 Like

Hey Lee-dohm, sorry for the extremely late reply. Work got hectic and in trying to solve my problem I completely forgot I had asked this question. I didn’t mean to be rude by not responding, and I hope this 10 months late reply will still be seen as better than no reply at all :stuck_out_tongue: .

I ended up using Mercurial, because it was easier to immediately understand, and I was able to write a batch file that I could run on a clock which handled most of the comitting. That doesn’t make your reply obsolete though, since many more projects are to come, and I will need a similar solution for those. Using mercurial helped me understand how the basics of version control works, and I think that will give me an easier time using Git.

Based on what you’re telling me, it does seem like I can integrate Git into my workflow. The use of Symlinks sounds like a good suggestion, and I should be able to create a little program that can scan through our project to find the folders that need tracking. I may also be able to integrate it directly into our animation software, since it allows you to extend it using plugins. I’ll also look into Git LFS. Once I manage to integrate Git into my workflow smoothly, I’ll be sure to post about it somewhere so others might take advantage of it too.

Again, thank you for your detailed reply, and sorry for my late response!

1 Like

It’s quite alright! I’m glad that my information was able to help clarify things 😀