Контроль версий ноутбуков Mathematica - PullRequest
66 голосов
/ 12 мая 2010

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

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

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

Ответы [ 7 ]

44 голосов
/ 12 мая 2010

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

Это легко отключить с помощью Option Inspector. В меню Mathematica выберите Формат & rarr; Option Inspector ... , в верхнем левом углу установите для раскрывающегося списка scope значение Selected Notebook и найдите FileOutlineCache в поле поиска. Установите опцию «Ложь» и сохраните свой блокнот, и все будет готово.

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

10 голосов
/ 01 июля 2013

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

6 голосов
/ 13 мая 2010

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

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

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

3 голосов
/ 04 апреля 2013

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

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

2 голосов
/ 06 сентября 2017

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

В конкретном случае с git довольно просто интегрировать mathematica-notebook-filter, чтобы git автоматически очищал выходные данные и метаданные при вычислении различий с помощью фильтров gitattribute . Вам понадобится установить фильтр 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 .

1 голос
/ 03 мая 2013

Что ж, мое решение состоит не в том, чтобы использовать Блокнот для отслеживания, а в использовании простых текстовых файлов (не простого текста в «Блокноте»).

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

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

0 голосов
/ 12 мая 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...