Как хранить мои бинарные активы в Mercurial? - PullRequest
4 голосов
/ 10 февраля 2012

Я начинаю проект по разработке игры, и моя команда, и я буду использовать Mercurial для контроля версий, и мне было интересно, каким будет более подходящий способ хранения бинарных ресурсов для игры.По сути, у меня есть 2 варианта:

  1. Mercurial 2.1 имеет расширение largefiles , но я не слишком много знаю об этом.Похоже, что это решит проблему «переполнения хранилища», но не решит проблемы конфликта двоичного слияния.

  2. Хранение бинарных активов в проверке SVN в качестве подотчетаТаким образом, мы можем заблокировать файлы для редактирования и избежать конфликтов слияния, но я бы очень хотел избежать использования двух систем контроля версий (особенно той, которая мне не очень нравится).

Какие-нибудь идеи / советы или другие варианты, о которых я не думал?

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

Вы правы, что расширение largefiles позволит избежать вздутия хранилища.Что происходит, так это то, что вы загружаете только большие файлы, необходимые для проверяемой ревизии.Таким образом, если у вас есть файл размером 50 МБ, и он был радикально отредактирован 10 раз, то версии могут занять 500 МБ на сервере.Однако, когда вы делаете hg update, вы загружаете только ту версию 50 МБ, которая необходима для этой ревизии.

Вы также правы, что расширение largefiles не помогает с объединениями.Фактически, он полностью пропускает шаг слияния и выдает только следующее:

largefile <some large file> has a merge conflict
keep (l)ocal or take (o)ther?

У вас нет возможности использовать обычный механизм слияния.

Для блокировки вы можетеиспользуйте расширение lock , которое я написал для клиента.Они хотели это для своего отдела документации, где люди будут работать с файлами, которые не могут быть легко объединены.По сути, он превращает Mercurial в централизованную систему, аналогичную Subversion: блокировки хранятся в файле в центральном хранилище, и клиент связывается с этим хранилищем при запуске hg locks и до hg commit.

2 голосов
/ 10 февраля 2012

Как вы и предполагали большие файлы будут делать то, что вам нужно.Для объединения двоичных файлов вы можете настроить инструмент слияния, если он существует для вашего типа файла .Примерно так:

[merge-tools]
mymergetool.priority = 100
mymergetool.premerge = False
mymergetool.args = $local $other $base -o $output
myimgmerge = SOME-PROGRAM-THAT-WILL-MERGE-IMAGES-FOR-YOU
[merge-patterns]
**.jpg = myimgmerge
**.exe = internal:fail

В общем, объединение нетекстовых вещей всегда будет проблемой при использовании инструмента управления исходным кодом.Приложения Digital Asset Management существуют для того, чтобы сделать это менее болезненным, но они не децентрализованы и не очень удобны для работы.

...