Integrating Jupyter Notebooks to a git workflow.
(I highly recommend installing this into a conda environment) To install the extension and enable it just run the following commands:
pip install jupygit
jupyter serverextension enable --py jupygit --sys-prefix
jupyter nbextension install --py jupygit --sys-prefix
jupyter nbextension enable --py jupygit --sys-prefix
I've been working with Jupyter Notebooks for a while, and I always felt something dying inside me everytime I pushed a massive file to GitHub, only to have it overwritten by my next huge commit causing me to have unreadable diffs. I decided to create this extension that, as I previously stated, is a hack.
Let's say you are working on a file called Awesome.ipynb
. What this extension will do once you press shiny new git button on your Notebook is:
- Shows a nice modal with an encouraging message.
- Renames your current file to
Awesome-jupygit___.ipynb
using Jupyter's API so that your kernel stays alive and you do not lose any work, we'll call this the "dirty" file. - Adds the pattern
*-jupygit___.ipynb
to your .gitignore file, so that your "dirty" file does not show up as a new file in your git repository. - Creates a copy of
Awesome-jupygit___.ipynb
but with the original nameAwesome.ipynb
, this copy is clean, no outputs and noexecution_counts
, we'll call this the "clean" file. - Now is your turn to commit
Awesome.ipynb
, the "clean" file to source control!
Are you done pushing things to Git? Now close the dialog and this will happen:
- Delete the file
Awesome.ipynb
(do not worry! your kernel and work is safe in the "dirty" file). - Rename
Awesome-jupygit___.ipynb
toAwesome.ipynb
so that you can resume your work where you left it before being a good human and using source control.