Git + большой набор данных?


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

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

Мне нужны данные в репозитории:

  • когда пользователи впервые клонируют хранилище, данные должны поступать вместе с ним.
  • данные не является 100% доступным только для чтения; время от времени точка данных корректируется или происходит незначительное изменение форматирования. Если с данными происходят незначительные изменения, пользователи должны быть уведомлены об этом при следующем оформлении заказа.

Однако мне не нужны данные в репозитории git:

  • клонирование git запасной копии (поэтому у меня есть две версии в моем домашнем каталоге) вытянет несколько ГБ данных, которые у меня уже есть. Я бы предпочел либо иметь его в фиксированном месте [установить правило, что данные должны быть в ~ / data], либо добавить ссылки как необходимый.
  • с данными в хранилище копирование на флешку может быть невозможно, что раздражает, когда я просто работаю над сотней строк кода.
  • Если ошибочная точка данных исправлена,я никогда больше не буду смотреть на ошибочную версию. Изменения в наборе данных могут быть отслежены в обычном текстовом файле или человеком, который предоставил данные (или просто не совсем).

Похоже, что мне нужна настройка с основным репозиторием для кода и вспомогательным репозиторием для данные. Есть ли какие-либо предложения или приемы для изящной реализации этого, либо в git, либо в POSIX в целом? Все, о чем я думал, так или иначе Клудж.

4 19

4 ответа:

Используйте подмодули, чтобы изолировать гигантские файлы от исходного кода. Подробнее об этом здесь:

Http://git-scm.com/book/en/v2/Git-Tools-Submodules

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

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

Иногда это даже не стоит отслеживать изменения в таких вещах.

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

Природа вашего гигантского набора данных также находится в игре. Если вы измените некоторые из них, вы изменяете гигантские капли или несколько строк в наборе миллионов? Это должно определить, насколько эффективно VCS будет играть механизм уведомления для него.

Надеюсь, это поможет.

Это звучит как идеальный повод попробовать git-приложение:

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

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

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

В качестве альтернативы, данные могут находиться в папке untracked (by git), которая синхронизируется службой p2p. Мы используем это решение для набора данных в несколько десятков ГБ, и оно работает довольно хорошо.

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

Syncthing - это программное обеспечение, которое мы используем.