Skip to content(if available)orjump to list(if available)

Git for Music – Using Version Control for Music Production (2023)

mrmattyboy

It's interesting seeing parts of life overlap.

I did music production at the same time as heavily using SVN and starting to use Git - I didn't cross this over at the time. All (in my case) Cubebase files were just -1, -2 suffixes and it worked. I had continuous backups, sure and it just kinda worked at the time.

Given I now use Git heavily in my work/hobby life, when doing other projects (3D models for printing (questionable at best) and artwork (very very very questionable at best)) I definitely wanted to use some sort of SCM. I opted for these for Perforce - mostly to experiment, but also the idea of having binaries in a distributed SCM. Yes, I know Git-LFS _exists_, but also, to me it breaks the idea of what Git is.. relying on a server for binaries in a situations where everything should be distributed.

If I now went back to audio-production, I would probably consider either Perforce or SVN. Perforce only if it were for a single user (because of licensing). The ability to clone/checkout a single directory of a repo at a given point in time natively and make modifications and push them back is almost quite necessary when dealing with very large files.

And I still use SVN for _some_ situations - particularly those where Perforce is overkill and all I want to _always_ HEAD and the rest is history (for manual preservation history) and no such need for merging and branching (thinking Wiki and other plain-text tooling).

In the case of any sort of any binary-merging - I _heavily_ assume this isn't expected in the poster's situation!

sasham

I'm one of the founders of https://diversion.dev. It's a version control used mainly by game developers, but also by some audio and video artists. Its advantages over git for music production - 1) it works with large binary files out of the box, and 2) it's easy to use for non-technical people. This also solves the issue of backing up and sharing the project complete with large media files that the author mentions.

tpoacher

Not pretending to be an expert in either system's internals, but I feel like svn would be a much better fit than git for this.

I find svn to be wonderful. There seems to be a real phobia against it which I've never understood and it's such a shame.

Especially when one of the biggest arguments "against" it is that "it's centralised" (when in fact using it in a decentralised manner is trivial), and ironically most people these days just use git as an interface to github (rather than the other way round), effectively using it in centralised manner.

hiAndrewQuinn

We'd probably see more SVN adoption if we had better ways to map it back and forth to a high quality Git repo. Even the minimal work I did writing [1] taught me the data models diverge in pretty fundamental ways. Can't blame people for being conservative around something at bedrock as their version control.

[1]: https://andrew-quinn.me/reposurgeon/

ericvtheg

I maintain MAKID, which is a desktop app built to integrate with Ableton live files in order to help manage versioning/organization. I’ve been wondering if a git workflow is the right one for producers. I feel like it sounds nice but in the end ppl are probably just gonna copy and paste their files because it’s intuitive and easy. Plus I imagine users getting confused by branching causing them to think they’ve lost their progress.

Shameless plug: https://www.makidapp.com/

AlecSchueler

What kind of contexts would branching be useful for? Working on the bass line on one branch while tweaking the lyrics on another to later merge them together?

Linear version control makes total sense to me: "Can we go back to the version from 2 weeks ago" "which one was that? "Before we removed the hi hat!"

But I struggle to think of a realistic case for branching.

pbd

The binary file problem is real - audio files balloon Git repos fast. Git LFS helps but adds complexity. I've had better luck with a hybrid approach: Git for project files/metadata/stems, cloud storage with versioned folders for final mixes. Keeps the repo lean while maintaining the branching workflow benefits.

dmje

I'm gonna guess that the OP (and many others) might use Git purely for the source file. I don't know about other DAWs but Ableton which is my DAW of choice has .als (which is usually pretty small) which contains references to the WAV and other dependent files. Of course, this doesn't solve the (common) problem of losing all your audio files but it does maybe make this approach a bit more feasible...

tombert

I've never really used it for anything serious, but doesn't Mercurial handle binary files better? I thought there was a more clever binary diff system for it.

olddustytrail

Are there any music formats that allow, conceptually, for easy diffs?

If there are, it's not beyond reason to add something to git to make it work better.

If changing a single bit at the start of file changes the whole thing then it's really a failing of the file format. By which I probably mean the container format.

astrobe_

Git presents things to you as patches, but it doesn't really uses patches internally [1], so having a specif diff program doesn't help - except maybe to get readable patches - because IIRC, this can be customized.

A version control system that would/is using patches internally would be more space efficient, but probably slower as it would have e.g. to apply all patches from version 0 to reconstruct the current version. Git made its choice with regard to this frequent dilemma and its original purpose, which was to version control the Linux kernel source code.

> If changing a single bit at the start of file changes the whole thing then it's really a failing of the file format. By which I probably mean the container format.

Audio formats are typically compressed, so this is hardly avoidable. Compression is a bit like encryption in that regard, except that (good) encryption deliberately introduces random data [2].

[1] https://jvns.ca/blog/2024/01/05/do-we-think-of-git-commits-a... (or long story short:) https://news.ycombinator.com/item?id=13644631

[2] https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation

PaulDavisThe1st

> Audio formats are typically compressed

Not in typical music production workflows.

doctorpangloss

I’m sure if GitHub made LFS storage free, adoption for large projects would 100x, and LFS bugs would be fixed fast.

EastLondonCoder

I’ve been using git for remote collaboration music production for 5 years. We sometimes use branches as well when we are working in let’s two ideas for a bass line. We’ve not really had any issues other than that we need git lfs.

The workflow is based on having the same software, ableton and plugins are largely mirrored.

We communicate over FaceTime which is good enough to assess ideas. When then record track for track and build the songs that way.

TremendousJudge

How do you handle merging different branches?

PaulDavisThe1st

Here's a video of a talk at the 2022 Ubuntu Summit on using version control with Ardour for the same purpose as TFA, but also for collaboration (particularly during COVID):

https://www.youtube.com/watch?v=gB7AsFbtJic

1zael

Most producers just use SoundCloud for version control. You can export tracks directly from the DAW. Since it's cloud-hosted, it's easy to share with others and enable them to listen and drop feedback as comments within the track waveform.

filoleg

This isn’t version control, this is just an equivalent of “releases” feature on Github for binaries.

If you can’t get the source code out of it (or, in this case, DAW project), it isn’t version control, it is more of a binary release history.

TonyTrapp

That's not version control, that's file sharing. You cannot share or version your DAW projects like RPP files through SoundCloud.

sroerick

It may never happen but I sure wish there was an open protocol for DAW files. Sounds like Reaper XML is a good start

macawfish

Dawproject is an open XML saw format

kace91

This is really a problem that should be solved by the daw itself.

AFAIK they all dump file management into the user, both for the “source” (projects) and the “binaries” (exported songs).

Ableton includes a feature for exporting self-contained projects so they don’t break if you load them in a different pc, which is the bare minimum, but other than that good luck.

Most of the problems engineers face are present in music production - collaboration, parallel work that may need to be merged, etc.

The subjective nature of music also makes it so that you’ll frequently want to try to develop the project some way and drop all changes if it doesn’t work, or that you’ll realise a change is problematic later (for example, something might sound well in headphones but horribly later in the car).

PaulDavisThe1st

Ardour projects are self-contained by default, and can be moved between different systems and different operating systems.

The problem comes mostly from two angles:

1) DAWs which allow you to use external audio/MIDI files and do not place referenceable copies of them inside the session/project folder itself.

2) Plugins that are available on the original system but are not available for whatever reason on the new system.

In my experience, #2 is a vastly bigger issue than #1.

thw_9a83c

At least the Reaper has a quite readable "rpp" XML project file. So this probably works nicely. Other that that, versioning DAW projects is a pure hell. It would require to version control all samples, plugins, configurations, etc. I don't really see an easy way to do it.

kace91

That’s why I said it should fall on the daw. They can serialise their own settings, including the plugins used and its versions, and have a common interface for plugins to expose and restore a serialisation of its internal setup.

I dont think it’s trivial at all, but exposed with a basic ui it could be a killer feature.

Hell, as a POC even simply saving everything internally on each “commit” could be a UX improvement, so you can move easily between “save points” of the project without going the “V2_final_forreal folder” route.

PaulDavisThe1st

> They can serialise their own settings, including the plugins used and its versions, and have a common interface for plugins to expose and restore a serialisation of its internal setup.

I'd be incredibly surprised if there is any DAW in existence that doesn't do this already.

But it has very little do with version control per se.

Ardour already has "snapshots" which work pretty much as you describe.

lodovic

An Ableton live set file is just a gzipped xml, so I can imagine some git hook that would unzip it before committing it to git. That way you can merge different branches, but it will surely come with its own limitations.

sorrythanks

It'd be cool to see something like the recent Automerge/Godot thing built into a music making application.

https://www.inkandswitch.com/project/beckett/

404oops

There should be a seperate VC for this, because using git for stuff like that is a bit wrong.

Also many DAWs export their project files as binaries (like Logic) so Git wouldn't like that much in terms of Diff and Compression

The main issue is also maintaining multiple folders. Git can do submodules, but that means creating new gits, publishing, making new submodules etc which is a waste of time that a normal person would rather spend making _v2s, even though they're cloggy and messy

p0w3n3d

this will work if and only if the DAW has good format (lexical, not compressed etc.)

PaulDavisThe1st

A few DAWs use XML already, but this is generally a very poor choice to use in combination with git, which is heavily line-oriented (whereas XML is not). It does work, but it is inefficient and the likelihood of merge conflicts is unnecessarily increased.