Using Makefile to Create Git Hook
technical
In our previous post, we created a Git Hook that will strip all the superfluous metadata automatically when you commit notebooks. We wanted to make the installation of this hook easier by creating a Makefile target.
Here is what we came up with:
SHELL := /bin/bash
.PHONY: hook
hook:
@echo -e '#!/bin/sh\nfor file in $$(git diff --diff-filter=d --cached --name-only | grep -E '"'"'\.ipynb$$'"'"')\ndo\n\tjupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace "$$file"\n\tgit add "$$file"\ndone\n' > .git/hooks/pre-commit
@chmod +x .git/hooks/pre-commit[Download]
Run make hook and Voila! You have your Git Hook that will reduce merge conflicts headaches.
My web searches while creating this Makefile
How to convert multiline file into a string with newline \n characters:
awk '$1=$1' ORS='\\n' filenameThis is how I converted an existing hook file (pre-commit) into a single string. I had to add tabs (
\t) manually, but thisawkgot me close enough.
awk '$1=$1' ORS='\\n' pre-commitwill return:
#!/bin/sh\nfor file in $(git diff --diff-filter=d --cached --name-only | grep -E '\.ipynb$')\ndo\njupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace "$file"\ngit add "$file"\ndone\n
How to write a multiline file with echo:
echo -e "Line 1\r\nLine2" >> readme.txtHow to escape single quotes in single quoted strings:
'"'"' is interpreted as '
How to escape dollar signs $ in Makefile:
Escape $ by adding another $ (i.e. $$)