Версионирование .ipynb в git: готовые решения

Я очень не люблю класть .ipynb блокноты в git. На каждое движение они изменяют свои метаданные, порождая хаотичные диффы. Если класть .ipynb в систему версионирования, то нужно предварительно очищать его от всех входов и выходов и следить, чтобы никто нечаянно не закоммитил неочищенную версию, и это все очень неудобно… Оказывается, не я один беспокоюсь из-за этого.

На StackOverflow есть дотошно оформленный топик о том, как лучше всего версионировать .ipynb. Что хотят люди:

  • Выбирать, сохранять вывод в VCS или убирать его
  • Предохранять от нечаянного коммита неправильного вывода
  • Иметь возможность сохранять между коммитами вывод в локальной версии документа
  • Трекать в VCS построчные изменения входных ячеек так же, как трекается обычный код
  • При pull-е обновлять входные ячейки рабочего ноутбука из очищенной версии в VCS.

Кто-то предъявляет к жизни очень высокие запросы…

Какие же предлагаются решения?

Первый скрипт нет возможности выключить для отдельных файлов, а только для всего репозитория. Кроме того, он выполняется только локально, не будет работать для других контрибьюторов. Второй скрипт, наоборот, выполняется, только если явно проставлен флаг в метаданных. Зато, кажется, его можно централизованно накатывать из репозитория. Третье решение хорошо для центральных серверов, но, кстати, можно попробовать адаптировать его для хуков.

В итоге, хорошего решения я не нашел, но, похоже, его можно собрать уже из этого. Следите за продолжениями.