DVCS с центральным репозиторием Windows

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

Какие системы DVCS могут размещать свой центральный репозиторий в Windows, обеспечивая ..

  1. Пушить доступ к репозиторию.
  2. Обычная проверка подлинности. В основном это просто способ разрешить или запретить доступ ко всему репозиторию. Нет необходимости в мелкомасштабном доступе.
  3. Серверный процесс, поэтому пользователям не нужно писать прямо в репозиторий, что снижает риск случайного вмешательства в него.

На стороне клиента графический интерфейс, такой как Tortoise, будет более или менее обязательным (извините, оболочка Windows - отстой.: |). Простота установки была бы огромным плюсом, поскольку у нашего ИТ-отдела уже достаточно ресурсов. И использование учетных данных Windows для аутентификации было бы преимуществом, но не требованием, пока клиент может хранить учетные данные.

Я (действительно) быстро взглянул на Git, Mercurial и Bazaar.

  • Git, похоже, использовал ssh или простой WebDAV для доступа к репозиторию, требуя разрешения на запись для пользователей.
  • Mercurial имел встроенный http-сервер, но, похоже, он использовался только для извлечения. Обновление: Mercurial также поддерживает push.
  • Bazaar. Похоже, что для доступа к репозиторию используется протокол sftp, что опять же требует разрешения на запись для пользователей.

Существуют ли серверные процессы Windows для каких-либо систем DVCS и удалось ли кому-нибудь настроить их в стране Windows?

И приносим свои извинения, если это повторяющийся вопрос. Мне не удалось его найти.

Обновить

Mercurial работает для push-целей! Подробный список того, что требовалось, можно найти в ответе ниже.


person Mikko Rantanen    schedule 28.04.2009    source источник
comment
Возможно, вы захотите обновить вопрос сейчас, когда вы узнали, как можно заставить hg serve принимать push-запросы.   -  person Martin Geisler    schedule 30.05.2009
comment
Потрясающий. Спасибо за подробные инструкции!   -  person mmacaulay    schedule 26.04.2010


Ответы (7)


Mercurial - почти наверняка ваш самый простой вариант в Windows.

Если вы не заботились об аутентификации, вы можете тривиально разрешить hg serve разрешить push. Для этого вам просто нужно добавить следующее в .hg/hgrc файл в репозитории, который вы хотите обслуживать:

[web]
allow_push = *
push_ssl = false

В первой строке написано, что кто угодно может отправить в этот репозиторий. Второй сообщает Mercurial разрешить отправку без SSL, поскольку hg serve в настоящее время изначально не поддерживает HTTPS. На этом этапе пользователи могут отправлять сообщения в ваш репозиторий, не имея нигде учетной записи. Если вы просто небольшой магазин, это, вероятно, нормально - тем более, что вы можете использовать способность Mercurial подписывать наборы изменений, чтобы гарантировать гораздо более высокий уровень проверяемости, чем в любом случае обеспечивает HTTP Basic.

Однако для более крупного магазина вы будете совершенно правы, если захотите установить хотя бы простой барьер для совершения сделки. Для этого вам нужно внести два изменения. Во-первых, вам нужно разместить Mercurial за веб-сервером с поддержкой обратного прокси или CGI. К счастью, последние версии IIS поддерживают и то, и другое. Вы можете ознакомиться с направлениями CGI в Mercurial Redbook для конкретных шагов Mercurial и Руководство Microsoft по настройке приложений CGI в IIS 6 для справки на стороне IIS.

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

Наконец, вы захотите изменить строку allow_push для поддержки только определенных пользователей, указав список имен пользователей, разделенных запятыми. Например:

allow_push = benjamin, ted, the_cow

Вот и все. Mercurial теперь будет разрешать push от пользователей, которые могут проходить аутентификацию через HTTP Basic, и разрешать получение от всех остальных.

person Benjamin Pollack    schedule 28.04.2009
comment
Пробую это сейчас. В настоящее время возникают некоторые трудности с настройкой, но выглядит очень многообещающе! Не знал, что Mercurial предоставил сценарий CGI для веб-обслуживания. - person Mikko Rantanen; 28.04.2009
comment
Думаю, я почти у цели. Сценарий CGI выполняется в оболочке, но с ошибками IIS. - person Mikko Rantanen; 29.04.2009
comment
Если вы дадите мне знать, что у вас не совсем сработало, я с радостью внесу исправления в Mercurial Redbook и обновлю этот вопрос. - person Benjamin Pollack; 29.04.2009
comment
Я писал ответ, но решил сначала протестировать нажатие - что не сработало. СЕЙЧАС я наконец заставил это работать. :) Сделаю пост подробнее. - person Mikko Rantanen; 29.04.2009
comment
Готово с постом. По-прежнему нужно посмотреть, могу ли я использовать безопасность каталогов NTFS для управления доступом вместо конфигурации репозитория в какой-то момент, но это не так важно. Главное, чтобы наконец заработало! \ o / Огромное спасибо! - person Mikko Rantanen; 29.04.2009

После того, как Бенджамин указал на сценарии CGI, обслуживающие HTTP, я решил попробовать их, и мне удалось получить репозиторий, размещенный через HTTP. Красная книга, которую Бенджамин connected оказал большую помощь, как и две статьи вики Mercurial. Один описывает Mercurial Publishing в целом, а другой содержит пошаговые инструкции по настройке скрипта CGGIbDir для HgWebDir.

Эти инструкции не были полностью надежными, поэтому мне пришлось немного покопаться. Скорее всего, потому что я использую 64-битную Vista. Приведенные ниже инструкции документируют то, что я сделал. Теперь, когда я сделал это один раз, я бы, вероятно, сделал все в другом порядке, поэтому не принимайте во внимание эти пошаговые инструкции.

Mercurial

Сначала я приобрел двоичный файл Mercurial с сайта http://mercurial.berkwood.com/, который был установлен в d:\dev\Mercurial. Я создал репозиторий для тестирования под d:\dev\testRepo репозиторием, используя hg init. d:\dev\Mercurial\library.zip содержит файлы библиотеки Mercurial, необходимые для сценария CGI, поэтому они были извлечены в d:\dev\Mercurial\library. Что меня сначала смутило, так это то, что когда я открыл zip-файл, я получил сообщение об ошибке и не увидел никакого содержимого. Однако простое извлечение файла в каталог сработало.

Для веб-скрипта я загрузил исходный код Mercurial, который содержал hgwebdir.cgi который был перемещен и переименован в d:\dev\Mercurial\webroot\hgwebdir.py. Пошаговая статья содержит хорошие инструкции по модификации скрипта hgwebdir для Windows. Они также содержат инструкции для hgweb.config, которые в моем случае выглядели так:

[paths]
/hg/hgwebdir.py/test = D:\dev\Mercurial\testRepo

Также репозиторий хотел следующую конфигурацию, чтобы я мог нажимать туда без SSL. Примечание. В настоящее время я использую обычную проверку подлинности для проверки подлинности пользователей. Мне пришлось создать конфиг в D:\dev\Mercurial\testRepo\.hg\hgrc и добавить к нему следующие строки:

[web]
allow_push = *
push_ssl = false

Python

Сценарий CGI - это сценарий Python, поэтому для него требуется Python. Кажется довольно разборчивым в том, какая версия Python его выполняет. В одной из статей упоминалось, что для его запуска требуется та же версия, которая использовалась для сборки Mercurial. В конце концов, я начал работать над Python 2.5 x86 после того, как попробовал Python 2.6 x64, Python 2.4, Python 2.5 x64.

IIS

Две вещи, которые я пропустил и которые пришлось установить, - это поддержка CGI и базовая аутентификация. Оба они были установлены через Панель управления, Программы и компоненты. После завершения установки я создал виртуальный каталог (который позже я изменил на приложение) в IIS, указывая на D:\dev\Mercurial\webroot. Виртуальный каталог требовал обработчика CGI для файлов * .py, который можно было добавить из сопоставлений обработчиков. Исполняемый файл был D:\dev\SDKs\Python25_x86\Python.exe %s. Когда у IIS были разрешения на корневой каталог, я мог перейти к http://localhost/hg/hgwebdir.py/test и посмотрите репозиторий.

Итак, теперь доступ для чтения работал. Когда я пытался нажать на репозиторий, я получал странные сообщения об ошибках, в которых говорилось, что это не настоящий репозиторий.

После часа отладки я скопировал все дерево D:\dev\Mercurial\library\mercurial в корневой каталог, чтобы Python мог найти D:\dev\Mercurial\webroot\mercurial\hgweb\hgwebdir_mod.pyc. После этого Wireshark сообщал об ошибках отказа в доступе в трассировке стека. Понятия не имею, в чем была настоящая причина этого, но изменение виртуального каталога в приложение в IIS и перемещение его поверх пула приложений, который запускался с использованием учетной записи локальной системы, ошибки отказа в доступе исчезли.

Также в какой-то момент я дал HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters разделу реестра больше разрешений, чтобы IIS мог получить к нему доступ. Сомневаюсь, что они требуются после использования учетной записи локальной системы.

Как только это было сделано, отправка материалов в репозиторий с использованием hg push http://localhost/hg/hgwebdir.cgi/test стала работать!

Проблемы и решения

  • Where to find the library files.
    • They were in the library.dll under Mercurial installation folder. I just had to extract them even if my unzip program refused to view me its contents.
  • How to get the Python script to run
    • Download the correct Python version for x86 architecture as the script uses some x86 libraries. The correct Python version depends on the Mercurial version. For 1.2.1 it was Python 2.5 x86.
    • В качестве альтернативы вы можете попробовать собрать Mercurial из источников с любой версией Python, которую вы хотите, но в моем случае это не удалось при создании расширений.
  • How to set CGI up in IIS
    • First make sure CGI is installed in IIS. This wasn't assumed to be true in the IIS instructions Benjamin posted.
    • Создайте новое сопоставление модулей для * .py в сопоставлениях обработчиков IIS. Правильный модуль - CgiModule, а исполняемый файл - ваш исполняемый файл Python +% s
  • How to allow the CGI script to write to the repository
    • Make sure the script has everything it requires. I had to move the library\mercurial\hgweb\hgwebdir_mod.pyc to another place.
    • Убедитесь, что у сценария есть разрешения везде, где он хочет. Я решил это, создав новый пул приложений для сценария CGI, который использовал учетную запись локальной системы, преобразовав виртуальный каталог в приложение в IIS и выбрав новый пул приложений.
person Mikko Rantanen    schedule 28.04.2009
comment
Большое спасибо за то, что вы подробно рассказали о том, что вам нужно было сделать! Я объединю ваши советы в книгу и отправлю автору для включения. - person Benjamin Pollack; 29.04.2009

Прочитав ответ Микко, который почти сработал для меня, я придумал свои собственные заметки для установки. Моя установка была спроектирована как «незащищенный и открытый» репозиторий, который члены моей группы могли использовать, установленный на Windows 2008 Server.

1. Установите Python.

Я использовал версию Python Python 2.6.2 и я использовал установщик MSI для Windows x86.

  • Установить для всех пользователей.
  • Установить в C: \ Mercurial \ Python
  • Используйте параметры функции по умолчанию.

2. Установите MinGW.
Я использовал версию Minimalist GNU для Windows MinGW 5.1.4

  • Установите MinGW-5.1.4.exe.
  • Выберите вариант загрузки и установки.
  • Выберите вариант текущего пакета для установки.
  • Для устанавливаемых компонентов выберите вариант «Минимальный».
  • Установить в C: \ Mercurial \ MinGW

3. Измените свой путь.

На этом этапе вам нужно добавить места к своему окружению.

  • Добавьте к пути 'C: \ Mercurial \ Python26; C: \ Mercurial \ MinGW \ bin' (Порядок имеет значение).

4. Установите Mercurial.

Версия mercurial, которую я использовал, была последней версией в стабильной ветке, и я не использовал двоичные файлы, но использовал исходный код. Я сам хотел скомпилировать mercurial, чтобы он работал с любой версией Python, которую я установил, поэтому мне не приходилось беспокоиться о каких-либо проблемах совместимости, которые, по моему мнению, были самой большой проблемой с другими методами установки. Самый простой способ получить исходный код - это загрузить файл «zip». Стабильная версия Mercurial

  • Распакуйте Zip-файл в C: \ Mercurial \ Source.
  • Создайте исходный код в командной строке.
python setup.py build --force -c mingw32
python setup.py install --force --skip-build

5. Измените свой путь.

Вам нужно вставить в свой путь к среде другое место для команды 'hg'.

  • Добавьте 'C: \ Mercurial \ Python26 \ Scripts; C: \ Mercurial \ Python26; C: \ Mercurial \ MinGW \ bin' к пути (порядок имеет значение.)

6. Создайте файл конфигурации.

Вам необходимо установить имя пользователя по умолчанию, если вы собираетесь выполнять какие-либо коммиты локально на этом сервере.

  • Создайте файл '"C: \ Documents and Settings {username} .hgrc"'
[ui]  
editor = Notepad  
username = your_name 

6. Проверьте свою установку.

Откройте новое командное окно и проверьте с помощью 'hg debuginstall' для проверки. Вы должны увидеть что-то вроде следующего.

Checking encoding (cp1252)...  
Checking extensions...  
Checking templates...  
Checking patch...  
Checking commit editor...  
Checking username...  
No problems detected  

7. Настроить веб-каталог.

  • Создать каталог 'C: \ Mercurial \ Web'
  • Скопируйте файл hgwebdir.cgi из "C: \ Mercurial \ Source" в "C: \ Mercurial \ Web"

8. Настройте IIS7 для централизованного репозитория.

Я использовал DefaultAppPool, который использует .Net 2.0, Pipeline = Integrated, Identity = ApplicationPoolIdentity.

  • Убедитесь, что функции CGI доступны в IIS7.
  • Панель управления / Программы / Компоненты Windows / IIS / Возможности разработки приложений / CGI
  • Добавьте приложение в IIS на желаемом веб-сайте.
  • Псевдоним = Mercurial - Физический путь = C: \ Mercurial \ Web
  • On the App select HTTP Modules and add a new Module Mapping.
    • Request Path=*.cgi, Module=CgiModule, Executable=C:\Mercurial\Python26\python.exe %s, Name=Mercurial.
    • Когда будет предложено добавить запись в список ограничений ISAPI и CGI, ответьте «Да».

9. Проверьте настройки Интернета.

Теперь вы должны иметь возможность просматривать http://localhost/Mercurial/hgwebdir.cgi и видеть пустой репозиторий. список.

10. Настройте IIS7 для удобного URL

Мне не нравился недружелюбный URL-адрес, и этот шаг позволяет нам переназначить URL-адрес на что-то более дружелюбное. Установите расширение URL Rewrite Moduel 1.1 для IIS.

  • В приложении Mercurial IIS в представлении функций диспетчера IIS выберите Компонент перезаписи URL-адреса и установите новое правило.
  • Выберите Добавить правила, затем шаблон «Правило с перезаписью карты». Правило Действие = Перезаписать, Указать карту перезаписи = Mercurial
  • Добавьте запись сопоставления. OriginalValue = '/ Mercurial / Repo', Новое значение = '/ Mercurial / hgwebdir.cgi'

11. Создать Mercurial Repository

Теперь вы можете создать тестовый репозиторий.

  • Создайте каталог C: \ Mercurial \ Repository и убедитесь, что учетная запись IUSR имеет разрешения на запись в каталог. (Если в учетной записи домена больше похоже на IUSR_ {ComputerName}.
  • Создайте файл C: \ Mercurial \ Web \ hgweb.config для вывода списка репозиториев.
[paths]
/ = C:\Mercurial\Repository\**
  • Добавьте каталог C: \ Mercurial \ Repository \ Test и инициализируйте репозиторий с помощью 'hg init'

** Если вы хотите, чтобы теперь можно было нажимать без ssl, создайте в каталоге .hg репозитория файл hgrc, следующие строки.

[web]
allow_push = *
push_ssl = false

Ссылки:

Установка Mercurial Wiki для Windows
Книга HG
Шаг за шагом
Публикация Mercurial Repositories

person degnome    schedule 27.05.2009
comment
Отличный гид! Я предлагаю использовать hg debuginstall для проверки установки. А книгу Брайана обычно называют книгой HG :-) - person Martin Geisler; 28.05.2009
comment
Хороший! Мне любопытно, для чего вам понадобился MinGW? Я думаю, что это уже установлено на всех моих компьютерах, но не думал, что Mercurial или Python будут использовать это. Также я думаю, что собираюсь перейти в открытый репозиторий. Я действительно не работал с Mercurial из-за проблем с аутентификацией пользователя. Я не могу использовать встроенную проверку подлинности Windows через Mercurial cient, а при обычной проверке подлинности Mercurial не запоминает учетные данные так, как это делает Subversion. - person Mikko Rantanen; 28.05.2009
comment
Я использовал MinGW для компиляции. Вы можете выбрать другие компиляторы, которые я считаю, и указать это в строке компиляции. сборка python setup.py --force -c mingw32 - person degnome; 30.05.2009
comment
Я пропустил часть «установлено из исходников». Виноват! - person Mikko Rantanen; 31.05.2009

Для команды, которая делает первый шаг в сторону от VSS, я бы предложил использовать SubVersion для управления версиями и либо TortoiseSVN или VisualSVN для клиента.

Но если команда приняла решение перейти на DVCS, я бы предложил Mercurial, потому что он лучшая поддержка HTTP и Windows на клиенте через TortoiseHg.

person Sijin    schedule 28.04.2009
comment
Я считаю, что большинство наших разработчиков знакомы с системой управления версиями, отличной от VSS, например с Subversion. Одним из самых больших требований были локальные коммиты, которые Subversion не поддерживает. Основываясь на других ответах DVCS здесь, на SO, я пришел к выводу, что Mercurial, вероятно, будет лучшим выбором, но я не смог найти способ разместить центральный репозиторий Windows с быстрым поиском в Google. Спасибо за мнение! - person Mikko Rantanen; 28.04.2009

Если вы ищете:

  1. Распределенная поддержка разработки
  2. Легко запускайте серверы Windows
  3. И отличный графический интерфейс

Вы в точности описываете пластиковый SCM

person pablo    schedule 29.04.2009

Простите за некропостинг и бессовестную саморекламу, но я только что выпустил альфа-версию HgLab, которая является Mercurial Server для Windows с полной поддержкой pull-push и интеграцией с Active Directory.

person Anton Gogolev    schedule 06.12.2012
comment
IIS и сервер SQL и Windows Server 2003 или более поздней версии в списке требований является излишним с моей точки зрения - person Lazy Badger; 06.12.2012
comment
Сугубо личное мнение - предпочитаю решения с минимальным количеством каких-либо зависимостей, сильные падения - это стоп-сигнал (для меня) - person Lazy Badger; 06.12.2012
comment
@LazyBadger По сравнению с тем, что необходимо для установки родного Mercurial в Windows (Apache и Python или IIS и Python), не говоря уже о том, что требуется для его интеграции с Active Directory, это ничто. - person Anton Gogolev; 06.12.2012
comment
Родной Mercurial в (любой) Windows - это только TortoiseHG (для рабочего места). Для а) централизованного б) управляемого хранилища репозиториев SCM-Manager потребует еще меньше усилий - person Lazy Badger; 06.12.2012

SCM-независимое (до некоторой степени) Windows-решение с Repository-frontent и управлением сегодня может быть SCM-Manager (Git, Mercurial, SVN репозиторий из коробки с одним требованием JVM)

person Lazy Badger    schedule 06.12.2012