Has anybody tried using GIT version control for session control of audio recordings?

22

6

Has anybody tried using GIT version control for session control of audio recordings?

I have used GIT in programming and it works very well, and is easy to use too. It works great for collaboration, which I find interesting as I may send a song to someone to do some work on and it would be a handy way of merging sessions and being able to jump back easily to a previous session. Also it would be awesome to be able to work with teams of people in remote locations ... but I have read somewhere that it doesn't work well with audio and this has put me off the experiment myself so I thought I'd better ask for other peoples experiences first.

I suppose in audio recording and mixing scenarios the arrangement is such a small file that it's just as easy to keep multiple versions of that file ie song_recording_1, song_recording_2, song_mix_1, song_mix_2 etc but I thought it would be interesting to see if there's been any experimentation with GIT or any other version control and what conclusions are being reached.

To be honest, ( and I know my system is a bit old so I am open to correction ) I find it strange that I haven't seen any type of version control already built into any DAW that I'm aware of ... it seems like it should be a fairly easy thing to add considering it would only be a matter of keeping track of sessions, which it more or less does already ... does anyone know why it hasn't been implemented yet ... I suppose most people operate some form of manual session control.

byronyasgur

Posted 2012-10-23T15:50:15.983

Reputation: 711

3I've thaught about this. The problem is that since song files arn't text files you wouldn't be able to do git merge or anything like that. As a result I'm not sure what would make this any better than just doing save as regularly. – None – 2012-10-23T19:59:54.867

1It isn't that it is bad for audio, but rather version control systems are supposedly bad for binary files. I don't know why for sure, but JPollack may be correct. On the other hand text files are just a special case binary file. You would probably get some insight about the general case by asking this at Stackoverflow – None – 2012-10-24T13:55:13.683

1I guess the issue is how do you determine what the difference is between two audio files? Determining that they are different is no problem but finding out what the difference is or what changed is an issue. This kind of reduces the usefulness of SC as all it becomes is essentially a repository where people can exchange files. – None – 2012-10-24T15:56:56.307

3

I suggest looking at http://git-annex.branchable.com/ too.

– None – 2012-10-24T19:51:33.973

For version control, I've heard some musicians use Dropbox. But it's centralized, you can't host it yourself, and only 2GB space is free. I wonder if there's an open-source host-it-yourself alternative to Dropbox. – None – 2012-10-25T04:54:40.207

3@Magrangs: that's not the issue, because DAWs normally don't modify any audio files in place, so you could really handle those as immutable data, managed efficiently by git-annex, which should also be quite a help in distributing the files. – leftaroundabout – 2012-10-25T08:35:38.120

@JPollock: I agree, that's likely a problem – have you tried it, though? I think git is quite agnostic about binary vs. text files, as long as they aren't compressed in some nontrivial way. Still it would be really hard to keep track about where changes happened. I have for quite a while been thinking about a source-code–based alternative to the usual GUI DAWs, but there aren't any that are really usable, are there? I've started to write something on my own, but probably won't be able to get it working well enough for professional use.

– leftaroundabout – 2012-10-25T08:44:02.430

@leftaroundabout It depends what you are working with and how you do things. I for instance sometimes bounce my effect chains down to audio to reduce CPU usage. How would this be handled via SC? If for instance someone else in the 'team' added an extra effect to the same track, bounced to audio and committed how could you possibly merge these two changes? – None – 2012-10-25T09:37:28.317

@Magrangs bouncing effect chains doesn't modify audio files in place but creates new files. It's IMO quite a hack anyway: reducing CPU usage by such means (in programming terms, memoising the results of audio effects) is something the DAW should be responsible for, not the user. – leftaroundabout – 2012-10-25T09:50:30.927

@leftaroundabout The question remains however, how do you merge the changes? Take another example, MIDI files. Say you need to merge two MIDI files, you would have to have in depth knowledge of the MIDI file structure to do this. Also when looking over the history of the file, would seeing a bunch of changed hex values, numbers and binary codes be very useful? Source control is great for text based data for which the structure is known. I don't think it would be very useful in a DAW other than to exchange files between team members. – None – 2012-10-25T09:57:12.347

@Magrangs I agree. That's why I'm proposing this library where you can directly write the project files as Haskell source code, I just don't think many people in the music business would use such a system even if it worked fine – many of them like shiny, vintage-looking GUIs that behave as much as possible like archaic tape machines...

– leftaroundabout – 2012-10-25T10:06:23.857

Interesting points ... for me the biggest thing ( mentioned above which I hadn't thought of ) is that if git was to say 2 files were different on a merge it would often be impossible to figure out where the differences were. – None – 2012-10-26T00:14:33.513

I like @derobert 's suggestion so this could be all done locally. If audio files are to be managed by this system than that is probably neccasasary. You could still sync the directory that all of this was happening with some sort of cloud storage. – None – 2012-10-26T09:49:08.573

@leftaroundabout I havn't tried it yet, very busy, but I will try it. Still, unless it could modify session files in order to merge them I don't see how it could be particularly useful. It would also have to intelligently deal with conflicts inside the session file. I'd imagine this is not doable with a proprietary system. It may be possible with Reaper, but who wants to learn new short cut keys? TL;DR I'll try it, Beacuse I'm intrigued by the possibility, but I don't see this one being very easy. – None – 2012-10-26T09:52:25.827

1FYI, git supports custom merge and diff drivers. So if you could (in a program) figure out what it means to diff or merge a MIDI file, you can have git do it. Same with a raw PCM file, or whatever. – None – 2012-10-26T15:02:51.700

Hey guys, if you need any more discussion on this topic, please move it to chat. Also see these questions for another discussion on this topic.

– Friend Of George – 2012-10-27T12:37:52.980

Answers

21

Yes, I have been using Mercurial (hg) with Logic Pro for a while now and with great results. Also coming from a software development background I find the main benefit to be the comments for each changeset and the ability to go back and branch from an earlier version to try out alternate production or composition techniques.

As mentioned you will likely pay for the benefits with the cost of increased disk space for binary files if they can't be clearly diffed. But in my experience this has not been bad since it is actually the project files that change. Also, Mercurial does have binary diff support though I have not tried it with audio files since ideally you want your recorded tracks to stay untouched by destructive edits for reuse.

Finally, the peace of mind that comes from being able to revert right back to a specific revision is priceless to me.


One practical note; be sure to ignore any transient or generated files that will waste space or save machine specific metadata.

Here is my excudes file used with Mercurial and Logic Pro (via OS X, naturally):

.hgignore

syntax: glob

.DS_Store

displayState
documentData.orig
windowImage.jpg

Project File Backups
Undo Data

Hope that helps.

Kelly Christoffersen

Posted 2012-10-23T15:50:15.983

Reputation:

3An old post, but in case you are still doing it: Have you actually been sharing project files, and having it work well? Or is this just for yourself? I can't see how merge conflict resolution could be handled at all... – RedFilter – 2017-03-30T12:34:40.330

2

Took the above advice. This has been working great for me with git. Logic Pro X 10+.

.gitignore

.DS_Store

Project\ File\ Backups
Undo\ Data.nosync
Autosave
DisplayState.plist
WindowImage.jpg

Haven't tried it, but splice looks interesting as well.

pbsladek

Posted 2012-10-23T15:50:15.983

Reputation: 121

Have you actually been sharing project files, and having it work well? Or is this just for yourself? I can't see how merge conflict resolution could be handled at all... – RedFilter – 2017-03-30T12:33:58.490

@RedFilter Just myself. Worked fine. Ended up using https://splice.com/ for working with others.

– pbsladek – 2017-08-07T21:23:28.720

2

Personally I prefer Boar for version control of binary files. That is the exact use case of that system - mostly used for photos, etc.

On the other hand, I can also recommend you the git Large File System. That means you can stay with git syntax/toolchain without a need of setting up boar.

jojek

Posted 2012-10-23T15:50:15.983

Reputation: 299

1Thanks for the suggestions. What are the main benefits of using Boar over git LFS? – P A N – 2016-08-15T20:27:37.643