I’m starting to really like nbdev only I found my self going back and forth between my git client. I wrote a method using GitPython to quickly add the changes of a particular notebook.
# export
from git import Repo
from nbdev.export import Config as nb_Config
from nbdev.export import *
def git_add(fname, commit_msg='.'):
repo = Repo(nb_Config().nbs_path.parent)
notebook2script(fname)
nb = read_nb(fname)
default = find_default_export(nb['cells'])
py = [os.path.join(nb_Config().lib_path,*default.split('.'))+'.py',
os.path.join(nb_Config().nbs_path,fname)
]
repo.index.add(py)
repo.index.commit(commit_msg)
return py
This is quit handy when changing things inside a model. Now I can just add the function below and easily iterate and still save the minor changes. You do get a lot of commits but you can squash those into one later.
It doesn’t work if the notebook is not saved. Anyone knows how to save a notebook (with code)?
I keep the following cell at the end of the “Committing” instructions section of the index.ipynb / README notebook:
#hide
# Heck, if you're feeling really lucky, you could even run the following
# to blindly commit and push.
# Did you save this notebook?
! make >/dev/null 2>&1
! git commit -am '.' >/dev/null 2>&1
! git status >/dev/null 2>&1
! git push >/dev/null 2>&1
I try to only keep it there, which helps me remember to save the notebook I’m actually interested in committing.