Ртутный эквивалент для экспорта SVN (без пароля)
В настоящее время я работаю над переносом существующего нашего проекта из SVN в Mercurial.
Мне нужно найти решение для следующего варианта использования:
В настоящее время существует сервер сборки, который получает svn-репозиторий через "экспорт svn" через http (локально в локальной сети). Это, очевидно, не требует ввода имени пользователя и пароля.
Затем проект создается, упаковывается и копируется в двоичном виде в назначенное хранилище, а неверсионная копия отбрасывается.
Все, что я мог найти в Mercurial как эквивалент, это "hg archive", который требует от меня сначала клонировать репозиторий и, таким образом, предоставить учетные данные.
Есть ли способ получить неверсированную копию репозитория без предоставления учетных данных?
Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ: забыл упомянуть, сервер, к сожалению, работает на машине Windows.
3 ответа
В терминале на сервере типа Mercurial hg serve
это запустит сервер Mercurial и проинформирует вас о URL, который обслуживается.
Затем вы можете получить zip файлов, которые у вас есть в текущем репозитории с the_url/archive/tip.zip
и действуйте соответственно.
Вы могли бы также серьезно рассмотреть возможность предоставления серверу сборки доступа на чтение к репозиторию и просто клонировать репозиторий, а затем выполнить извлечение. Вы также можете посмотреть на использование перехватов post commit для отправки сообщения на сервер сборки, чтобы начать сборку.
Предполагая, что у вас есть имя пользователя BUILD_SERVER для процесса, который выполняет ваши сборки, вы можете просто установить его в конфигурации репозиториев, (.hg/hgrc
), что этот пользователь не имеет прав записи:
[acl.deny]
# This list is checked first. If a match is found, acl.allow is not
# checked. All users are granted access if acl.deny is not present.
# Format for both lists: glob pattern = user, ..., @group, ...
** = BUILD_SERVER
Затем вы можете использовать сервер сборки hg pull
а также hg up -C
чтобы получить ваш код, в том числе конкретные изменения с hg up -r
, без риска вашей сборки машины делает коммиты. Смотрите здесь для более подробной информации о ACL.
"svn export" через http... Это, очевидно, не требует ввода имени пользователя и пароля.
WTF?! "Очевидно, что"??? RLLY?! Вы можете экспортировать только потому, что специально включен анонимный RO-доступ к SVN-репо
Есть ли способ получить неверсированную копию репозитория без предоставления учетных данных?
Да. Но он должен быть настроен на стороне исходного Mercurial-репозитория, если вы не управляете им (или не можете запросить изменения) - вы НЕ УДАЕТЕ
Предисловие
- Вы можете
svn export URL
без аутентификации только потому, что некоторые операции в репо (или в некоторых его частях) были включены для анонимных пользователей - Subversion - это CVCS, Mercurial - это DVCS (таким образом, с удаленными URL-адресами вы можете выполнять только минимальный набор команд,
hg archive
нет в этом списке)
Лицо
- В любом случае, вы должны клонировать репозиторий в локальное зеркало перед выполнением архивирования
- Это может быть одноразовое действие (меньше затрат на более поздние синхронизации) или выполняться каждый раз
- Анонимный доступ только для чтения должен быть настроен на стороне хранилища исходного кода. В случае использования hgweb+Apache для http-репозиториев прочитайте "3.6.3.2. Ограничить отправку известными пользователями " на вики-странице "Публикация Mercurial Repositories".
- Даже (специальный) аутентифицированный пользователь не представляет большой проблемы: с расширением ACL пользователь получит доступ на чтение (частично) к хранилищу без доступа на запись, учетные данные пользователя могут быть сохранены в (локальном) клоне внутри файла hgrc
Вы должны пересмотреть свой метод. Делать эквивалент экспорта или даже клонировать репо снова и снова нет необходимости в Mercurial, и это пустая трата времени.
Вместо, clone
только один раз pull
а также update
при запуске сборки. Весь репозиторий остается в вашем рабочем пространстве, и извлечение гарантирует, что вы получите последнюю ревизию в своем репо. Как только ваш репо обновится, вы можете обновить его до любой ревизии. С обновлением также возможно очистить вашу папку, если вы хотите повторить старое поведение. Хотя очистка вашего рабочего пространства не является обязательной, рекомендуется сделать это для вашего сервера сборки.
Если это решит проблему с паролем, вам не нужно искать дальше. Если вам по-прежнему нужна информация о том, как предоставлять учетные данные во время извлечения, прочитайте этот вопрос / ответ.
РЕДАКТИРОВАТЬ: Таким образом, вам все еще нужен доступ только для чтения для сервера сборки, и в этом случае вам придется прибегнуть к другому серверу для вашего ртутного репо. Rhodecode предлагает некоторые варианты для этого, прочитайте это.