Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using git with Logic Pro

Tags:

git

mercurial

tl;dr: Will git or Mercurial have problems versioning a project with a few small files that change frequently and many large files that can change but rarely do?


I write music using Logic Pro, and I'm considering using version control software with my projects from now on. I found a SE question that talks about using Mercurial with Logic (https://video.stackexchange.com/questions/5148), but I would like to use git more (because I need to learn it for my job anyway, so the extra practice would be nice). Would git be an effective tool for versioning Logic projects, or will I run into problems that Mercurial won't have?

Here's what a Logic project directory looks like:

  • The file that changes the most is a project file that's a few kilobytes in size, changes frequently, and is non-human readable (I think).
  • There are several large, uncompressed audio files that rarely change, but do change occasionally. They're usually 1 MB to 10 MB in size.
  • Other audio files of any size or format can be included as assets. They also might change.
  • Occasionally, executables that serve as synthesizer or instrument plug-ins will be included. They probably will never change, but they can be added and removed.
  • There are several supporting files that are similar to the main project file. The question I found earlier suggests having the VCS ignore some of them.
like image 370
Kevin Avatar asked May 15 '13 17:05

Kevin


2 Answers

Git mostly handles Logic Pro X projects correctly, but there are a few things you need to watch out for:

  • The extended attributes on the top-level bundle folder itself might not be preserved, so you'll probably want to save your project as a folder instead of a bundle.

  • You'll probably want to add Freeze Files, Bounces, and *.nosync to your .gitignore.

  • Some of the internal file naming conventions will make it impossible to check out the project from Windows systems. This won't be a problem for versioning your own projects on your own computer, but if you've checked the Logic project into a repository that's part of a larger thing (e.g. a game) this will probably cause problems for others.

  • If your repository uses LFS, it would be a good idea to register *.aif and (probably) *.wav with it, as well as any other large media types that get saved into the Logic project. This will make checking out a new copy much easier, especially from particularly large projects (as git can have problems with very large pack files).

  • If you edit the project from multiple computers or branches you will almost certainly have merge conflicts in the Autosave data, so you'll probably want to .gitignore that as well.

On the other hand, you generally do not need to worry about your original audio recordings changing at all; most of Logic's audio edits are nondestructive in nature and only modify metadata that refers to the original files, rather than modifying the files themselves. The only exceptions to this that I know of are audio edit functions that apply on the "File" tab of the audio editor (e.g. Normalize, Change Gain, Reverse, Time and Pitch Machine, etc.). Functions applied from the "Track" and "Smart Tempo" tabs only edit metadata and shouldn't cause large diffs to happen in git.

like image 122
fluffy Avatar answered Oct 17 '22 10:10

fluffy


Git will do this just as well as Mercurial.

I do not know Logic Pro, but from what you are saying about the file formats, the delta storage might not work well, and in the worst case git will basically have to store each version of each file. You can do the math yourself to estimate the storage requirements then, and decide if that is ok for you. (However, when changing only some parts of uncompressed audio files, you'll probably get some savings...)

Clearly, you won't get any usable diffs and merges, which may be problematic once you collaborate with others, but I don't know if this is a concern here.

like image 24
Alex Krauss Avatar answered Oct 17 '22 11:10

Alex Krauss