I might be crazy to suggest something like this and I might also be alone in wanting it, but being a programmer using Git every day for more and more tasks, I’m thinking about starting to use it on my Renoise songs as well. I think my Git workflow will fit great with my musical creative workflow in that they share a lot of common properties.
Exploring different ideas and directions is hard to do if you want to preserve the idea without destroying another idea or the original song. Preserving all directions a song can take can lead to a horrible mess of obscurely named XRNS files on disk with dates interpolated to give some idea of which idea is newer and to separate between several versions of the same idea.
With Git, this mess can be replaced with branching. One branch per idea that I can switch between any time I want. With full revision and “undo” history of every change I’ve ever made on any idea since the song was first created. Since branches can have verbose descriptions(and all Git commits are date-stamped by default), it’s easy to describe what idea you’re exploring so it’s easy to find back to old ideas.
My songs usually reach milestones of different sorts. Up until now, I’ve catalogued these by first creating a folder for each XRNS file I’m working on and then subfolders for each milestone I reach. I usually copy the XRNS file along with WAV renders of it into the subfolder and name the folder after the date of the milestone and some description of what it is. An example would be 2015-07-11.Solskogenfor a song I just released this Saturday on Solskogen.
With Git, this space consuming and limiting system can be replaced with tags. Since tags can have verbose descriptions (and all Git commits are date-stamped by default), it’s easy to find back to old versions of the song. And since a tag is just a 40 byte large reference to a given commit, I’d save a lot of space as well.
Now here’s the problematic part. Since XRNS files are binary, merging is just not possible. So I wonder; could it be an option when saving a Renoise song to save it to a folder instead of as a binary ZIP file? This would make merging two ideas possible, for instance. There’s probably a plethora of problems with this I haven’t thought of, but with some support in Renoise, I think this could become really powerful and time saving. It would also save drive space and help in the rare occasions where a song gets corrupted (not necessarily by Renoise).
Git support within Renoise
The ultimate dream would be if Renoise itself initialized a new Git repository with each new song and for every time you saved, it created a new commit with an optional message. Every time you rendered, it could automatically create a new tag. Every time you added a new track, it created a new branch. Okay, that last idea would probably be a bit over the top, but I hope you get the idea of how powerful this could be if it was properly integrated into Renoise.
I’m going to start using Git with Renoise on my next song anyway, but I would love to hear what other people think about this idea and whether merging is possible at all. What do you guys think?