DVCS с центральным хранилищем Windows - PullRequest
24 голосов
/ 28 апреля 2009

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

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

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

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

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

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

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

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

Обновление

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

Ответы [ 7 ]

17 голосов
/ 28 апреля 2009

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 теперь позволяет отправлять запросы пользователям, которые могут проходить аутентификацию через HTTP Basic аутентификацию, и разрешать извлечение всем остальным.

12 голосов
/ 29 апреля 2009

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

Эти инструкции не были полностью надежными, поэтому мне пришлось немного покопаться. Скорее всего, так как я использую 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 source , который содержал 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 были права доступа к каталогу webroot, я мог перейти к http://localhost/hg/hgwebdir.py/test и просмотреть репозиторий.

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

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

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

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

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

  • Где найти файлы библиотеки.
    • Они были в библиотеке .dll в папке установки Mercurial. Мне просто нужно было извлечь их, даже если моя программа распаковки отказалась просматривать мне ее содержимое.
  • Как запустить скрипт Python
    • Загрузите правильную версию Python для архитектуры x86, так как скрипт использует некоторые библиотеки x86. Правильная версия Python зависит от версии Mercurial. Для 1.2.1 это был Python 2.5 x86.
    • В качестве альтернативы вы можете попробовать собрать Mercurial из исходников с любой версией Python, но в моем случае это не удалось при создании расширений.
  • Как настроить CGI в IIS
    • Сначала убедитесь, что CGI установлен в IIS. Предполагалось, что это не так в инструкциях IIS, опубликованных Бенджамином.
    • Создайте новое сопоставление модулей для * .py в сопоставлениях обработчиков IIS. Правильный модуль - CgiModule, а исполняемый файл - ваш исполняемый файл Python +% s
  • Как разрешить сценарию CGI записывать в хранилище
    • Убедитесь, что в скрипте есть все, что требуется. Мне пришлось переместить library\mercurial\hgweb\hgwebdir_mod.pyc в другое место.
    • Убедитесь, что у скрипта есть разрешения везде, где он хочет. Я решил эту проблему, создав новый пул приложений для сценария CGI, использующего учетную запись локальной системы, преобразовав виртуальный каталог в приложение в IIS и выбрав новый пул приложений.
7 голосов
/ 27 мая 2009

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

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

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

  • Установить для всех пользователей.
  • Установка в 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 ' к пути (Order Matters.)

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

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

  • Распакуйте 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 ' к пути (Order Matters.)

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

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

  • Создать файл ' "C: \ Documents and Settings {имя пользователя} .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
  • В приложении выберите «Модули HTTP» и добавьте новое сопоставление модулей.
    • Путь запроса = *. Cgi, Модуль = CgiModule, Исполняемый файл = C: \ Mercurial \ Python26 \ python.exe% s, Имя = Mercurial.
    • При появлении запроса на добавление записи в список ограничений ISAPI и CGI скажите «да».

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

Теперь вы сможете просматривать http://localhost/Mercurial/hgwebdir.cgi, видеть и очищать список репозиториев.

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

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

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

11. Создать хранилище Mercurial

Теперь вы можете создать тестовое хранилище.

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

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

[web]
allow_push = *
push_ssl = false

Ссылка:

Установка Windows Mercurial Wiki
HG Book
Шаг за шагом
Публикация ртутных репозиториев

2 голосов
/ 28 апреля 2009

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

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

0 голосов
/ 06 декабря 2012

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

0 голосов
/ 06 декабря 2012

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

0 голосов
/ 29 апреля 2009

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

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

Вы точно описываете Пластик СКМ

...