Почему Mercurial не поддерживает создание удаленных репозиториев по HTTP?
Я знаю, что невозможно создавать репозитории Mercurial удаленно, используя HTTP(S), например:
$ hg init https://host.org/repos/project
или же
$ hg clone /path/to/local/project https://host.org/repos/project
Но в чем причина? Проблемы с безопасностью? В этом нет необходимости? Просто потому, что никто еще не реализовал это?
Обоснование этого вопроса: в моей компании мы разделяем большинство ресурсов через HTTPS, то есть права доступа управляются только Apache, и обычные пользователи не могут войти через SSH на сервер. Это просто идеально, если нужно обслуживать только хранилища (для этого мы довольны hgwebdir.cgi
). Однако мы также хотим разрешить удаленное создание репозиториев без необходимости поддерживать дополнительные / исправленные сценарии на сервере и дополнительные инструменты на клиентах.
Чтобы быть ясным: этот вопрос не просит решения нашей конкретной проблемы, но по причине, почему Mercurial не поддерживает эту функцию сама.
ОБНОВИТЬ
Вот более техническое описание ситуации, о которой я думаю. предполагаемый hgwebdir.cgi
обслуживает коллекцию репозиториев в /path/to/repos
в https://.../repos
(с включенным нажатием). Каждый пользователь, которому разрешен доступ к этому URL (как настроено в Apache), может извлекать и выдвигать наборы изменений, фактически это означает, что hgwebdir.cgi
(и поэтому hg
) редактирует и создает файлы ниже /path/to/repos
, Теперь, что является препятствием в сдаче hgwebdir.cgi
также создайте новые репозитории ниже /path/to/repos
?
3 ответа
Я думаю, причина в том, что добавление поддержки для создания репозиториев принесет изрядное количество багажа:
если вы можете создавать репозитории, вы ожидаете, что сможете их удалить. Хотя это может показаться простым, это было бы большим шагом в сторону от безопасного способа, которым обычно работает Mercurial - в стандартном Mercurial нет деструктивных команд.
люди также хотели бы редактировать
.hg/hgrc
файлы для установки описания и контактной информации - стандартный Mercurial никогда не меняет конфигурационные файлы, так что это снова будет новостью.люди также хотели бы управлять доступом пользователей к новым репозиториям - это означает редактирование
.htaccess
файлы или эквивалент для других веб-серверов.
... и так далее. Реализация этой "маленькой" функции откроет много дополнительных запросов к функциям, и у нас есть только несколько разработчиков Mercurial, которые также являются пьяными веб-разработчиками.
Однако теперь существует отличное решение с открытым исходным кодом: Kallithea предоставляет вам "мини-Bitbucket", который вы можете развернуть на своем собственном сервере. Это сделает все вышеперечисленное. Я бы установил это на свой сервер, если бы мне нужно что-то более мощное, чем обычное hgweb.cgi
, Он поддерживает как Mercurial, так и Git.
Насколько я знаю, ни одна из альтернатив SCM не позволяет создавать удаленные репозитории изначально. SVN, CVS, Git и др.
Обычно это работа хостинг-провайдера: SourceForge, Google Code, BitBucket. Все они реализуют создание хранилища поверх своей инфраструктуры аутентификации.
Например, хостинг Debian Mercurial ограничен разработчиками Debian, и для создания нового хранилища вам необходимо войти через SSH на сервер и создать хранилище в локальной домашней папке, во многом аналогично Apachepublic_html
каталог.
Различные ответы (включая ваш собственный) дают довольно веские причины, почему функциональность отсутствует (в основном разделение интересов), но если вы действительно хотите добавить ее, вы можете сделать это всего лишь одной или двумя строками. Вот ужасно небезопасный пример, который я привел довольно давно, показывающий, как добавить эту функциональность в среде с высоким уровнем доверия: создание удаленного репозитория в Mercurial через HTTP