Есть ли способ определить поставщика хранилища Git на основе информации, доступной в клоне репо? - PullRequest
0 голосов
/ 18 октября 2019

Как я могу определить, какой провайдер Git доступен за определенным «удаленным» (я вижу это в .git/config). Я говорю здесь о локально установленных серверах Git, где доменные имена недостаточно явны (например, git.company.com).

Я хочу знать, работаю ли я с сервером Gitlab или Bitbucket дляпример. Два продукта имеют разные способы работы и разные API. Я хотел бы знать, например, какой API загружать при работе с определенным репозиторием Git. Или как разобрать некоторые сообщения коммита, которые каждый провайдер Git генерировал по-разному.

Ответы [ 2 ]

3 голосов
/ 19 октября 2019

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

Например, вы можете попробовать конечную точку API REST для каждого типа сервера и посмотреть, какой ответ вы получите. Вы также можете запросить конечную точку SSH для каждого сервера;строка версии сервера будет содержать «babeld» для GitHub Enterprise, строку OpenSSH для GitLab и обычно что-то на основе Java для Bitbucket Server.

Для некоторых серверов также существуют отличительные заголовки HTTP. Вы можете добавить /info/refs?service=git-upload-pack в конец URL (который является конечной точкой refs). GitHub предоставит вам заголовок сервера с GitHub Babel, GitLab может предоставить вам специальные GitLab заголовки, а Bitbucket также может предоставить идентифицируемые заголовки (такие как x-server).

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

0 голосов
/ 19 октября 2019

Краткий ответ: нет.

С точки зрения git нет никакого API, только Git Protocol и все серверы реализуют протокол (почти) одинаково.

Если вы хотите использовать специфичный для сервера API, он совершенно не известен git. Вы должны знать, что такое сервер и какую версию API он реализует. Или исследуйте известные конечные точки и протоколы API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...