2015-05-31 3 views
3

Количество команд, которые вы можете запускать снова в удаленном репозитории с использованием стандартных клиентов, очень ограничено.
Большинство удаленных команд предоставляются git-ls-remote. Является ли это ограничением только git-клиента или сервера git?Почему различные команды git доступны только локально?

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

Хорошим случаем для этого было бы получение журналов (то есть git log), поэтому причина вопроса. Текущая практика заключается в использовании проприетарного API, разработанного любой службой, предоставляющей git repostiory (github, gitlab, gerrit, bitbucket, stash и т. Д.), Поэтому я думаю, что клиент, разработанный с использованием стандартного протокола git, разобрался в этой проблеме.

+1

Зачем вам нужно дистанционно вести журнал? Просто выберите изменения из удаленного репо, а затем запишите локально. http://stackoverflow.com/questions/13941976/commit-history-on-remote-repository – gman

+0

Я не хочу клонировать/извлекать репо локально. Я надеюсь, что в этом есть смысл. –

+0

@gman, чтобы прояснить комментарий, было бы неэффективно клонировать репозиторий, чтобы я мог получить журнал. Мне нужен только журнал, поэтому я хочу именно это. Существует ряд проприетарных API, которые выполняют это (github api, gitlab api, hulu api и т. Д.). Если сервер git предоставляет данные, я хочу разработать клиент, который выведет эти API из бизнеса. –

ответ

5

Я думаю, что клиент, разработанный с использованием стандартного протокола git, рассмотрит эту проблему.

Это было бы вернуться к децентрализованной модели Git (где каждая операция является локальной и быстрым) к централизованной один (где вам нужно получить доступ к серверу для выполнения операции.

Большинство команд (logs, diff, commit, ...) имеют смысл, когда у вас есть полное репо.

Если сервер git предоставляет данные, я хочу разработать клиент, который помещает эти A ПИ вне бизнеса.

Там нет "мерзавец сервер", только слушатели (HTTPD или SSHD), которые затем вызвать git-receive-pack и git-upload-pack (в случае smart protocol).

http://stefan.saasen.me/articles/git-clone-in-haskell-from-the-bottom-up/images/pack-client-server.png

(От «Reimplementing “git clone” in Haskell from the bottom up»)

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


Одна альтернатива Я знаю это gitolite site local commands.
Gitolite - это уровень аутентификации (называемый слушателем https или ssh и проверяющий право пользователя на доступ к репо).
Он может делегировать некоторые команды, которые будут выполняться «локально» на сервере:

Основная цель gitolite, чтобы предотвратить вас от оболочки. Но есть команды, которые вам часто нужно запускать на сервере (т. Е. Не может быть сделано, нажав что-то на репо).

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

Вспомните эти команды как эквивалентные командам COMMAND_DIR в man git-shell.


Возможное расширение: см «Announcing GitTorrent: A Decentralized GitHub»

Это пример получения от сервера что-то Git-то, чем просто пакет файлов.

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

git clone gittorrent://github.com/cjb/recursers 

Git на самом деле имеет расширяемый механизм для сетевых протоколов, построенных так, как это работает в том, что мой мерзавце clone line превращается в «запустить команду git-remote-gittorrent и передать ей URL-адрес в качестве аргумента».

+0

К сожалению, я стараюсь избегать установки дополнительного программного обеспечения. Это потому, что я искал «стандартное» решение, которое работает как на разных провайдерах SAAS (т. Е. Github), так и на моем собственном git-сервере. Я надеялся, что git-receive-pack и git-upload-pack достаточно умны, чтобы предоставить данные, которые мне нужны для реализации клиента, который может заменить различные собственные API/решения, доступные в настоящее время. –

+0

@ Theuserwithnohat я понимаю. Я не думаю, что git-receive-pack и git-upload-pack могут делать все, что возвращает файлы пакетов. Я отредактировал ответ, чтобы проиллюстрировать, что протокол git может быть расширен/переопределен. Но это означает установку чего-то еще на сервере. Кажется, что Git не поддерживает ваш случай использования. – VonC

Смежные вопросы