Расширение Репозиториев Git И Mercurial С Помощью Amazon S3

Наверняка многие из вас слышали или знают по собственному опыту, что системы контроля версий плохо работают с бинарными файлами, большими файлами и особенно большими бинарными файлами.

Здесь и далее речь идет о современных популярных распределенных системах контроля версий, таких как Mercurial и GIT. Часто это не имеет значения.

Не знаю, причина это или следствие, но системы контроля версий используются в основном для хранения относительно небольших текстовых файлов.

Иногда несколько картинок или библиотек.

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

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

Далее мы рассмотрим пример интеграции систем контроля версий и Amazon S3 (облачного файлового хранилища), чтобы воспользоваться преимуществами обоих решений и компенсировать недостатки.

Решение написано на C#, использует API Amazon Web Services и показывает пример настройки репозитория Mercurial. Код открытый, ссылка будет в конце статьи.

Все написано более или менее модульно, поэтому добавить поддержку чего-то кроме Amazon S3 не должно быть слишком сложно.

Я могу себе представить, что настроить GIT будет так же легко.

Итак, все началось с идеи — нам нужна была программа, которая после интеграции с системой контроля версий и самим репозиторием работала бы совершенно незаметно, не требуя от пользователя никаких дополнительных действий.

Как магия.

Реализовать интеграцию с системой контроля версий можно с помощью так называемых хуков — событий, которым можно назначить свои обработчики.

Нас интересуют те, которые запускаются в момент получения или отправки данных в другой репозиторий.

В Mercurial необходимые хуки называются входящими и исходящими.

Соответственно, вам нужно реализовать по одной команде для каждого события.

Один предназначен для загрузки обновленных данных из рабочей папки в облако, а второй — для обратного процесса — загрузки обновлений из облака в рабочую папку.

Интеграция с репозиторием осуществляется с использованием файла метаданных, индексного файла или чего-то еще, что вы предпочитаете.

Этот файл должен содержать описание всех отслеживаемых файлов, как минимум пути к ним.

И именно этот файл будет находиться под контролем версий.

Сами отслеживаемые файлы будут находиться в .

hgignore, списке игнорируемых файлов, иначе весь смысл этой идеи потеряется.



Интеграция репозитория

Файл метаданных выглядит примерно так:
   

<Эxml version="1.0" encoding="utf-8"?> <assets> <locations> <location>Content\Textures</location> <location>Content\Sounds</location> <location searchPattern="*.

pdf">Docs</location> <location>Reference Libraries</location> </locations> <amazonS3> <accesskey>*****************</accesskey> <secretkey>****************************************</secretkey> <bucketname>mybucket</bucketname> </amazonS3> <files> <file path="Content\Textures\texture1.dds" checksum="BEF94D34F75D2190FF98746D3E73308B1A48ED241B857FFF8F9B642E7BB0322A"/> <file path="Content\Textures\texture1.psd" checksum="743391C2C73684AFE8CEB4A60B0317E634B6E54403E018385A85F048CC5925DE"/>

Теги: #vsc #dvcs #Mercurial #hg #git #aws #amazon s3 #dropbox #skydrive #bittorrent sync #системы контроля версий #Amazon Web Services
Вместе с данным постом часто просматривают: