Как использовать Git в качестве сети распространения контента - PullRequest
3 голосов
/ 08 декабря 2009

В книге «Git Internal» упоминается об использовании git в качестве одноранговой сети распространения контента на p50, но не так много подробностей. Особенно как иметь несколько веток, в которых есть отслеживание разных файлов. Пример:

(рабочий каталог) a00.exe a01.exe b00.exe c00.exe c01.exe c02.exe

Основная ветвь отслеживает все файлы, тогда как ветвь A отслеживает только a00.exe и a01.exe, ветвь B отслеживает b00.exe и так далее. Следующий коммит обновит a00.exe b00.exe c00.exe. Как создать такие ветки? После того, как все ветки зафиксированы, я могу получить только определенную ветку с удаленного компьютера? Спасибо!

Ответы [ 2 ]

7 голосов
/ 08 декабря 2009

Вам понадобится какой-то сценарий для создания различных ветвей контента для вас. Основной способ сделать это - добавить содержимое в базу данных (в вашем случае, просто поместив их в основную ветку), затем во временный индекс, считывая все содержимое, которое вы хотите иметь в каждой ветви (git read -tree / git update-index), запись этого дерева (git write-tree), запись объекта коммита (git commit-tree) и обновление ветки до этого нового коммита (git update-ref). Это все сантехнические команды, которые обычно не используются в повседневных операциях, но позволяют создавать моментальные снимки без одновременного хранения всего содержимого в каталоге на диске.

Пример сценария для выполнения чего-то подобного здесь:

http://github.com/schacon/gitcrazy/blob/master/update_content.rb

Здесь я определяю количество серверов, каждый из которых имеет одну или несколько ролей («memcache», «database» или «webserver»). Затем я могу добавить контент к роли, подобной этой:

$ update_content.rb /path/to/content file_name memcache

Это добавит содержимое в мой git db, а затем обновит ветви для затронутых серверов (в данном случае с ролью memcache). Я могу сделать это для нескольких файлов для любой роли, и git будет отслеживать, какой контент должен иметь каждый сервер. Затем каждый сервер может получить свою конкретную ветку ('server / s1', 'server / s2' и т. Д.).

Я подумываю в скором времени сделать скриншот, демонстрирующий это, надеюсь, пример сценария будет полезен. Это должно быть довольно легко бежать и выяснить, что происходит. В том же проекте есть сценарий «list», в котором указано, какой контент находится на какой ветви сервера.

5 голосов
/ 08 декабря 2009

Автор этой темы Скотт Чакон (Scott Chacon), который рассказывает о сети распространения контента для рекламы в каком-то торговом центре, снял видео / выступил на эту тему. вдохновляющие: http://www.techscreencast.com/language/ruby/using-git-in-ruby-applications---scott-chacon-/1431

...