Каков ваш способ сохранить двоичные зависимости в системе управления версиями?

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

У нас много зависимостей для кросс-платформенного приложения. Это включает коммерческую библиотеку в версиях 32/64 * linux/windows/mac и несколько библиотек с открытым исходным кодом, собранных в нестандартных, не так-тривиальных для воспроизведения средах. Кроме того, у нас есть графические активы, которые иногда бывают большими (250Mb довольно распространен).

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

Я хочу достичь чего-то близкого к обновлению и сборке системы с одним щелчком.

Я пытался хранить все в SVN, но это приводит к большим обновлениям, даже если данные не были изменены.

Теперь я думаю о какой-то скриптовой системе, которая будет загружать и распаковывать zipped файлы с помощью libs и активов, только когда это необходимо, в качестве события сборки. Сценарии будут версироваться, дата не будет.

Но может быть, есть готовое решение? Есть ли у вас какой-либо опыт?

Ответ 1

Субмодулы отлично справляются с этим. В одном проекте у меня был код для приложения, размещенного в частном порядке на unuddle.com, и все DLL и т.д. (Большой материал), который был в общественном достоянии в любом случае, хранился в github. Это закончилось тем, что мы очень мало использовали наше частное хранилище.

Ответ 2

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

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