2016-10-05 7 views
2

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

Формат файла, который сохраняет приложение, представляет собой gzipped-репозиторий Git, поэтому мне не нужно будет записывать репозиторий на диск. Как я могу лучше всего обрабатывать колоды в качестве репозитория Git таким образом?

ответ

5

Посмотрите на libgit2. Он поддерживает сценарий репозитория в-памяти, а также имеют привязки для многих языков:

https://libgit2.github.com

Например, с помощью rugged, рубин связывания для libgit2, вы могли бы сделать что-то вроде этого:

a_backend = Rugged::InMemory::Backend.new(opt1: 'setting', opt2: 'setting') 

repo = Rugged::Repository.init_at('repo_name', :bare, backend: a_backend) 
+0

Спасибо. Я действительно не понимаю «Backend». Зачем мне это нужно? – birdoftheday

+0

Бэкэнд в контексте libgit2 - это всего лишь механизм хранения вашего репо. Это может быть хранилище в памяти, дисковое хранилище, хранилище базы данных, хранилище кэш-памяти и т. Д. Подробное описание бэкэндов можно найти в libgit2 [здесь] (http://blog.deveo.com/your-git-repository-in -a-database-pluggable-backends-in-libgit2 /) – rpepato

+0

@rpepato Знаете ли вы, работает ли это для 'clone_at'? Я не могу найти в документации – Tiago