Кто-нибудь использует git таким образом?
Я хотел бы распространять содержимое мультимедиа с сервера на удаленные устройства Android. Я бы хотел, чтобы они отправили обратно файл журнала с использованием статистики использования устройств (предоставляемой приложением для Android, которое я напишу).
Сервер может быть любым, но я бы предпочел использовать linux box.
Я думал, что с git дескриптор и сич только различия между файлами, это было бы хорошим инструментом для этой цели, и у меня была бы история пересмотра контента в качестве бонуса.
Мне нужно несколько советов о том, как может быть организована архитектура репозиториев: должна ли она быть звездообразной топологией или чем-то другим?
Удаленный конец системы не нуждается в какой-либо интерактивности, другими словами, удаленный репозиторий git может тянуть и толкать все, что ему нужно, автономно и автоматически.
ОБНОВЛЕНИЕ: Я нашел здесь на SO автор git внутренних (я загружаю его прямо сейчас), Скотт Чакон говорит об архитектуре, которую я хотел бы реализовать.
ОБНОВЛЕНИЕ 2: ОК. Я прочитал главу "Использование без SCM Git", и вот что автор говорит о одноранговом CDN:
Вы должны получить новый контент [...] состоят из любой комбинации xml файлы, изображения, анимации, текст и звук. Вам нужно создать контент которая будет легко и эффективно передавать все необходимый контент для машин в вашей сети. Тебе нужно постоянно определяют, какой контент каждый машина имеет и что ей нужно иметь и передать разницу как насколько возможно. [...] Оказывается, что git является отличное решение этой проблемы.
Я не нахожу ничего о том, чтобы упомянуть небольшие части книги внутри него, поэтому я надеюсь, что я не нарушу никаких авторских прав. В любом случае я удалю его, если кто-то пожалуется.
Итак, в предыдущем задании мы использовали Git именно для этого, и причина заключалась в том, что наши медиа-активы не часто менялись, поэтому независимо от того, что мы использовали, вероятно, нам пришлось бы отправить весь файл в любом случае - таким образом, проблемы с бинарным дефинированием, хотя и проблема с другими инструментами распространения контента, не были важны.
Основное преимущество rsync (и, предположительно, унисон, хотя я никогда не использовал его) заключается в том, что вы можете создавать деревья контента в индексе и хранить деревья в Git под веткой на клиент, а не иметь все на диске для запуска rsync. Если у вас есть несколько вариантов контента, довольно приятно записывать уникальные деревья содержимого, необходимые каждому клиенту, из которых у вас могут быть тысячи комбинаций, и иметь простую команду pull, чтобы получить только то, что нужно, и обновить его на клиенте, Вот почему мы выбираем Git вместо rsync для этого. Если каждому клиенту нужен точно такой же набор данных, возможно, rsync будет проще, однако другая приятная вещь о Git заключается в том, что вы получаете историю содержимого на каждом клиенте - когда и как он изменился для каждого отдельного клиента.
Мы также использовали его для записи файлов журналов - поскольку они в целом довольно однородны и основаны на тексте, они отлично дельта и очень эффективно передаются - мы были очень довольны использованием этого для записи и переноса данных по нашим журнальным данным.
Протокол git пытается отправлять патчи вместо целых файлов, но механизм хранения git всегда хранит целые файлы и всегда хранит старые версии файлов. git, вероятно, не является инструментом для задания, если вы не пытаетесь сохранить историю файлов.
rsync - это зрелая система распространения файлов, которая может работать через ssh или собственный протокол (так же, как git), может создавать двоичные исправления и не обязательно содержать историю изменений. Наверное, начните искать там, чтобы посмотреть, сможете ли вы получить эту работу.
Я бы предложил против использования git для таких цепей. Во-первых, git будет использовать дополнительное хранилище для телефона для истории изменений и в любом случае будет отправлять целые файлы (а не дельта), потому что мультимедийный контент двоичный и не работает на нем. Просто реализуйте метод для отображения мультимедийных данных на стороне сервера с датами последней модификации и другим способом загрузки обновленных файлов (я бы предложил HTTP, поскольку он является самым простым). На стороне сервера вы можете, конечно, использовать git внутренне для управления версиями мультимедийных файлов, но я бы не стал раскрывать интерфейс git.