Управление версиями ноутбуков Mathematica

Ноутбуки Mathematica - это, конечно же, файлы с открытым текстом - кажется разумным ожидать, что они будут хорошо играть с системой контроля версий (git в моем случае, хотя я сомневаюсь, что это имеет значение для конкретной системы). Но факт в том, что любой .nb файл заполнен информацией о кеше, метками времени и другими различными метаданными. Его отбросы.

Это означает, что возможно ограниченное управление версиями - фиксации и откаты работают нормально. Слияние, однако, является катастрофой. Mathematica не откроет файл с маркерами слияния в нем, а текстовый редактор не сможет пройти через .nb файл.

Неужели кому-нибудь удавалось положить ноутбук под контроль версий? Как?

Ответ 1

Рекомендуется отключить кеш файл, который представляет собой метаданные, на которые вы ссылаетесь, когда вы смотрите на ноутбук с помощью текстового редактора. Как вы обнаружили, это может вызвать конфликты слияния, если несколько сторон редактируют один и тот же блокнот.

Это легко отключить с помощью опционного инспектора. В меню Mathematica перейдите в Формат Option Inspector..., в верхнем левом углу выберите раскрывающееся меню область в выбранном ноутбуке и выполните поиск FileOutlineCache в поле поиска. Установите параметр False и сохраните ноутбук, и все должно быть установлено.

Обратите внимание, что это может сделать открытие ноутбуков немного медленнее, но если ноутбук не большой, вы, вероятно, не заметите разницы.

Ответ 2

Существует хороший набор рекомендаций по использованию Git для управления версиями с помощью Mathematica в Mathematica Stack Exchange. Короче говоря, философия состоит в том, чтобы свести к минимуму использование ноутбуков .nb и попытаться выполнить большую часть контроля версий с помощью пакетов .m(аналогично тому, что говорят пользователи xuhdev и MMA выше). Это кажется вполне разумным, учитывая способ управления ноутбуками.

Ответ 3

Не решение проблемы слияния в точности, но именно так мы обрабатываем ноутбуки и контроль над версиями в моей команде. В основном, мы рассматриваем ноутбуки Mathematica так, как мы будем обрабатывать двоичные файлы. Они зарегистрированы, но:

  • мы всегда сохраняем копию в формате pdf вместе с .nb(резервная копия для восстановления информации в случае, если мы по какой-то причине теряем возможность чтения .nb файлов. Все-таки запатентованный формат, но немного более распространенный, и, скорее всего, Adobe и Wolfram не будут одновременно исчезать)
  • мы не разрешаем слияния
  • мы кодируем только конечный продукт (рендеринговый ноутбук) вместо файла .nb.

В основном мы используем Mathematica для небольших доказательств, исследований и боковых стволов, поэтому описанная выше процедура отлично подходит для нас (наша основная документация находится в LaTeX, которая создает дружественную документацию для не математиков/не-программистов)

Ответ 4

В соответствии с тем, что говорили Саймон и Кена, когда у меня был контроль Mathematica.nb под управлением версиями, я часто создаю текстовую версию только кода ввода и сохраняю ее с тем же именем, но расширение .txt, Хотя это напрямую не решает проблему слияния, это делает разумную работу и делает ручное слияние более очевидным, когда я возвращаюсь для редактирования .nb позже. В этом формате все еще есть некоторые особенности, но это намного проще читать, чем исходный формат .nb.

Чтобы сгенерировать текстовый файл, я просто копирую ноутбук в новый пустой блокнот (с ярлыками, Ctrl-A, C, N, V), выберите меню Cell- > Delete All Output, скопируйте результат (Ctrl- A, C) и вставьте результат в текстовый редактор, чтобы сохранить его. Это займет удивительно мало времени, как только вы получите его.

Ответ 5

Ну, мое решение не использует Notebook для отслеживания, но использует текстовые файлы (а не обычный текст "Notebook" ).

Всякий раз, когда у вас есть ноутбук, вы можете использовать меню "сохранить как...", чтобы сохранить текущий файл в виде текстового файла. Когда вам нужно загрузить его, просто откройте его с помощью Mahthematica. Отслеживание этого файла было бы намного лучше, чем отслеживание файла Notebook. Я не уверен, какие функции вы можете потерять, используя формат обычного текста, а не ноутбук Mathematica, но до сих пор я не обнаружил никаких дефектов.

Ссылка: http://www.topbug.net/blog/2013/05/02/track-mathematica-source-files-with-version-control-systems/

Ответ 6

Вы должны получать только маркеры слияния, если система управления источником обнаруживает изменения в одной строке несколькими пользователями.

Исходная система управления добавляет маркеры, чтобы сделать, если очень ясно, где конфликты, и заставить вас вручную удалить их (при разрешении каждого конфликта). Для системы управления источниками нет возможности знать, как сделать это автоматически для вас.

Если файл является текстовым, но предназначен для чтения только программой, у него могут отсутствовать символы конца строки (или очень длинные строки). Поэтому, если несколько человек работают над таким файлом, вы получите много конфликтов слияния.

Я не знаком с файлом nb файла, но в целом решение этой проблемы состоит в том, чтобы гарантировать, что только один человек работает над файлом за раз (т.е. использует режим эксклюзивной регистрации для nb файлов).

Ответ 7

Новая возможность заключается в использовании mathematica-notebook-filter, который анализирует ноутбуки Mathematica и разбивает все выходные ячейки и метаданные, чтобы они не были зафиксированы в система управления версиями.

В конкретном случае git довольно легко интегрировать mathematica-notebook-filter, чтобы git автоматически очищал вывод и метаданные при расчете различий при использовании gitattribute filters. Вам нужно будет установить mathematica-notebook-filter фильтр, добавленный в вашу переменную пути (или адаптировать конфигурацию ниже, чтобы указать на двоичный файл) и добавить следующую строку в файл ~/.gitattributes:

*.nb    filter=dropoutput_nb

Это дает команду git анализировать все файлы, соответствующие *.nb, с фильтром dropoutput_nb, который определен в вашем ~/.gitconfig как:

[filter "dropoutput_nb"]
    clean = mathematica-notebook-filter
    smudge = cat

Если по какой-то причине вы хотите, чтобы конкретный ноутбук Mathematica был связан со всеми выводами и метаданными, вы можете отключить фильтр в файле проекта .gitattributes, добавив:

notebook_file.nb    !filter

Отказ от ответственности: я являюсь автором этого инструмента. Это с открытым исходным кодом, и отзывы (как хорошие, так и плохие) приветствуются. Взносы приветствуются на Github.