Каков ваш способ сохранить двоичные зависимости в системе управления версиями?
Мне интересно, как наилучшим образом поддерживать двоичные зависимости в команде "дружественный команде".
У нас много зависимостей для кросс-платформенного приложения. Это включает коммерческую библиотеку в версиях 32/64 * linux/windows/mac и несколько библиотек с открытым исходным кодом, собранных в нестандартных, не так-тривиальных для воспроизведения средах.
Кроме того, у нас есть графические активы, которые иногда бывают большими (250Mb довольно распространен).
Библиотеки должны быть обновлены, иногда перекомпилированы и т.д. Также обновляются обновления, и нам нужно, чтобы они синхронизировались с кодом.
Я хочу достичь чего-то близкого к обновлению и сборке системы с одним щелчком.
Я пытался хранить все в SVN, но это приводит к большим обновлениям, даже если данные не были изменены.
Теперь я думаю о какой-то скриптовой системе, которая будет загружать и распаковывать zipped файлы с помощью libs и активов, только когда это необходимо, в качестве события сборки. Сценарии будут версироваться, дата не будет.
Но может быть, есть готовое решение? Есть ли у вас какой-либо опыт?
Ответы
Ответ 1
Субмодулы отлично справляются с этим. В одном проекте у меня был код для приложения, размещенного в частном порядке на unuddle.com, и все DLL и т.д. (Большой материал), который был в общественном достоянии в любом случае, хранился в github. Это закончилось тем, что мы очень мало использовали наше частное хранилище.
Ответ 2
С Mercurial 2.0 вы можете использовать расширение больших файлов для управления такими файлами. Они будут храниться за пределами обычной истории и загружаться по требованию. У расширения все еще есть некоторые острые края, поэтому убедитесь, что вы используете хотя бы версию 2.0.1.
Как я уже сказал, я предпочитаю использовать выделенный инструмент для этого - так как управление эффективностью действительно лучше всего сделать за пределами системы управления версиями.