Как правильно обрабатывать исходный код и данные в хранилище
Я работаю над совместным научным проектом, который состоит из нескольких сценариев Python (максимум 1 МБ) и относительно большого набора данных (1,5 ГБ). Наборы данных тесно связаны со сценариями Python, поскольку сами наборы данных являются наукой, а сценарии - простым интерфейсом к ним.
Я использую Mercurial в качестве инструмента управления исходным кодом, но у меня нет четкого представления о хорошем механизме для определения хранилища. С точки зрения логистики имеет смысл объединить их так, чтобы клонировав хранилище, вы получили весь пакет. С другой стороны, меня беспокоит инструмент управления источниками, работающий с большими объемами данных.
Есть ли чистый механизм для этого?
3 ответа
Если файлы данных меняются редко и вам все равно обычно нужны все эти данные, просто добавьте их в Mercurial и покончите с этим. Все ваши клоны будут иметь размер 1,5 ГБ, но так и должно быть при таком количестве данных.
если данные являются двоичными данными и часто меняются, то вы можете попытаться избежать загрузки всех старых данных. Один из способов сделать это - использовать подкаталог Subversion. У вас будет .hgsub
файл с
data = [svn]http://svn.some.edu/me/ourdata
который говорит Mercurial сделать svn checkout
с правой стороны URL и поместите рабочую копию Subversion в клон Mercurial как data
, Mercurial сохранит для вас дополнительный файл под названием .hgsubstate
, в котором он записывает номер редакции SVN, чтобы оформить заказ на любой заданный набор изменений Mercurial. Используя подобную Subversion, вы получите только последнюю версию данных на своем компьютере, но Mercurial будет знать, как получить более старые версии данных, когда это необходимо. Пожалуйста, ознакомьтесь с этим руководством для суб-хранилищ, если вы идете по этому маршруту.
В официальной вики есть статья о больших двоичных файлах. Но предложение @MartinGeisler - действительно хорошая новая альтернатива.
Мое первое желание состоит в том, чтобы отделить скрипты Python от их собственного репозитория, но мне действительно нужно больше информации о домене, чтобы сделать "правильный" вызов.
С одной стороны, если будут созданы новые наборы данных, то вы бы хотели, чтобы основной набор инструментов мог обрабатывать все из них, верно? Но я также могу видеть, как новые наборы данных могут представлять случаи, когда сценарии, возможно, ранее не обрабатывались... хотя в идеальном мире кажется, что вы хотели бы, чтобы сценарии были написаны в общем виде, чтобы они могли обрабатывать будущие данные и существующие наборы данных??