2016-12-28 10 views
0

У меня есть usecase, где мне нужно иметь возможность проверять репозитории Git как часть веб-сервиса, а средний размер репо будет очень большим - 1 ГБ + из-за того, что он используется для проектов видеоигр. Мне нужно сделать простые действия, такие как перечисление истории изменений и т. Д.Возможно ли удаленный доступ и просмотреть историю изменений git?

Прямо сейчас я реализую его через вызовы API для удаленных служб хоста Git (Github, Bitbucket и т. Д.). Это работает хорошо, однако есть некоторые большие проекты Git, такие как GitVersion, которые работают только с реальными репозиториями Git, которые используют libGit2sharp, и я не могу легко написать работу.

Я чувствую, что это будет длинный, но мне было интересно, обсудил ли кто-нибудь или начал ли работать над реализацией libGit2sharp, который работает с основными хостами Git через их API. Очевидно, что не все действия, доступные в libGit2, будут работать с интерфейсом API, но по крайней мере большинство действий только для чтения.

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

ответ

2

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

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

Эта функция будет недоступна и невозможна, поскольку Git не обеспечивает способ выполнения этих задач.

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

Не говоря уже о том, что поиск каждого необходимого объекта по HTTP будет крайне медленным, и вы вряд ли сможете получить что-либо, захватив Gigabyte или два из сети.

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

Я не знаком с тем, как GitVersion принимает свои решения, но если он не просто хочет ссылки и их отношения друг с другом и тегами, а скорее хочет посмотреть на репозитории, и вам нужно он вместо того, чтобы просто реплицировать часть своей логики, я бы рекомендовал загрузить репозитории и выполнить весь анализ там. Это будет гораздо более эффективное использование времени для аренды небольшого количества дискового пространства у какого-либо провайдера, чем попытка сопоставить API каждого отдельного провайдера с какой-либо идеализированной версией команды git, где вам все же нужно выяснить крайнюю ситуацию как для команду и ее API, которые вы используете.

+0

Да, это имеет для меня большой смысл. Спасибо за совет! –