Making 'git diff' Work For .amxd
Here's a quick tip if you're using git for revision control in developing Max/MSP or Max For Live devices.
Perhaps you have been here?
$ git diffdiff --git a/cool.amxd b/cool.amxdindex c7a9b88..afdafb1 100644Binary files a/cool.amxd and b/cool.amxd differ.amxd files are basically JSON, but with a non-JSON file header. This binary part at the beginning makes git fall back to binary file mode when trying to show diffs. Usualy that's not very helpful.
There's just a bit of configuration to make the git diff output more helpful. Here's what to do:
- Create a global
.gitattributesfile in your home directory. This will will map the.amxdfile extension to a named file type that we will use later. Run this command to create the file with the correct contents:
echo '*.amxd binary diff=amxd' > ~/.gitattributes- Now tell git where to find the new global
.gitattributesfile. Run this command:
git config --global core.attributesfile ~/.gitattributes- The final step is to tell git how to convert the 'binary' file to text when displaying a diff. Add this content to your
~/.gitconfigfile:
[diff "amxd"] textconv = awk '(NR>1)' binary = trueNow, when you run git diff you will get useful output:
diff --git a/cool.amxd b/cool.amxdindex c7a9b88..afdafb1 100644--- a/cool.amxd+++ b/cool.amxd@@ -52,7 +52,7 @@ "saved_attribute_attributes" : { "valueof" : { "parameter_exponent" : 0.5,- "parameter_initial" : [ 100 ],+ "parameter_initial" : [ 0 ], "parameter_initial_enable" : 1, "parameter_longname" : "De-Click", "parameter_mmax" : 100.0,In this case, we're using awk to suppress printing the first line. That's good enough for my uses, but if you are an awk wizard and you want to use a tool like jq to work with the JSON data, perhaps you can suppress everything to the initial { on that first line. Let me know if you do that. zack@steinkamp.us
If you'd like to have a look at some of my Max for Live devices, you can see them here.