Вопрос

Что мне нравится в ископаемое заключается в том, что он использует обычный старый SQLite для хранения изменений, файлов и т. Д. Я могу использовать его инструмент командной строки, чтобы запросить репозиторий, но если я хочу, чтобы что -то не поддерживало, я могу отступить за написание запроса SQL.

Mercurial и GIT более зрелые, у них больше библиотек, больше импульса, но они используют свой собственный формат хранилища. Интересно, возможно ли иметь SQLite в качестве бэкэнда? (Я знаю, что есть инструменты, чтобы прямо запрашивать ртутное или GIT Repo, но SQL кажется проще.)

Это было полезно?

Решение

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

Я не читал ни одного из источников Меркуриала, но я представляю, что ситуация не сильно отличается.

Как я предложил в своем комментарии, я не совсем уверен, почему вы хотели бы сделать это. Чтобы GIT по -прежнему имел все свои преимущества, вам придется хранить объекты GIT в вашей базе данных SQLite. Вам по -прежнему понадобятся все инструменты GIT низкого уровня для доступа и манипулирования ими - вы не будете просто искать капли и деревья на их SHA1 и выполнять всю оставшуюся работу самостоятельно. (И даже если по какой -то причине вы захотите, вы можете сделать это так же легко, посмотрев в каталоге объектов GIT.)

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

PS Если вы найдете конкретную неподдерживаемую операцию, которую вы хотите сделать, и у вас возникли проблемы с поиском сантехники, необходимой для ее выполнения, или с сценарием, необходимыми для его реализации, разместите здесь вопрос! Нет причин застрять только потому, что вы не можете использовать SQL.

Другие советы

Как пишет Jefromi, Mercurial также использует пользовательский формат для достижения высокого сжатия и быстрого доступа к любому пересмотру. Это Revlog Format которая представляет собой структуру данных только для приложения, которая использует преимущества неизменности изменений в Mercurial.

Однако, конечно, можно заменить этот формат хранения другим, если хотите. Google сделал это, когда они поставили Mercurial на BigTable для code.google.com. Одним из забавных последствий их использования своего собственного формата бэкэнд является то, что вы не видите никаких чисел пересмотров в их веб -интерфейсе. В обычном ртути номера пересмотров (целое число только для локального, которое вы можете использовать вместо полного хэша с изменениями), являются индексом изменений в Revlog. Когда в Revlogs не хранятся изменения, нет естественного индекса, и поэтому Google не показывает вас не номеров.

Это возможно с бэкэндами Libgit2:https://github.com/libgit2/libgit2-backends/blob/master/sqlite/sqlite.c

Я не сделал никаких измерений, но производительность должна немного пострадать. Тем не менее, это также удобнее (один файл для всей истории репо, классический язык запросов SQL ..etc ..)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top