2009-04-28 10 views
24

Actualmente utilizamos VSS para el control de versiones. Muy pocos de nuestros desarrolladores están interesados ​​en un modelo distribuido (y quieren deshacerse de VSS). Nuestra red está llena de máquinas con Windows y, si bien nuestro departamento de TI tiene experiencia en el mantenimiento de máquinas Linux, preferiría no hacerlo.DVCS con un repositorio central de Windows

¿Qué sistemas DVCS pueden alojar su repositorio central en Windows mientras que proporciona ..

  1. acceso al repositorio de empuje.
  2. Autenticación básica. Principalmente solo una manera de permitir o denegar el acceso a todo el repositorio. No es necesario un acceso de grano fino.
  3. Proceso del servidor para que los usuarios no necesiten escribir directamente en el repositorio reduciendo el riesgo de tropezar accidentalmente con él.

En el lado del cliente, una GUI como Tortoise sería más o menos un requisito (lo sentimos, el shell de Windows apesta: |). La facilidad de instalación sería una gran ventaja ya que nuestro departamento de TI ya tiene muy pocos recursos. Y el uso de credenciales de Windows para la autenticación sería una ventaja, pero no un requisito, siempre y cuando el cliente pueda almacenar las credenciales.

He tenido una visión (realmente) rápida de Git, Mercurial y Bazaar.

  • Git parecía usar ssh o WebDAV simple para acceso al repositorio, que requiere permiso de escritura para los usuarios.
  • Mercurial tenía un servidor http incorporado, pero esto parecía ser solo para fines de extracción. Actualización: Mercurial admite también push.
  • Bazar Parecía que usaba sftp para el acceso al repositorio, requiriendo nuevamente un permiso de escritura para los usuarios.

¿Existen procesos de servidor de Windows para cualquier sistema DVCS y alguien ha logrado configurar uno en un terreno de Windows?

Disculpe si se trata de una pregunta duplicada. No pude encontrar uno.

actualización

Got Mercurial de trabajo para fines de empuje! Lista detallada de lo que se requiere se puede encontrar como una respuesta a continuación.

+0

Es posible que desee Actualice la pregunta ahora que ha visto cómo se puede hacer "hg serve" para aceptar impulsos. –

+0

Impresionante. Gracias por las instrucciones detalladas! – mmacaulay

Respuesta

17

Mercurial es casi seguro su opción más fácil en Windows.

Si no le importó la autenticación, en realidad puede permitir trivialmente hg serve permitir la inserción.Para ello, simplemente hay que añadir lo siguiente al archivo .hg/hgrc en el repositorio que desea servir:

[web] 
allow_push = * 
push_ssl = false 

La primera línea dice que cualquier persona puede empujar a este repositorio. El segundo le dice a Mercurial que permita empujar sin SSL, ya que hg serve actualmente no es compatible nativamente con HTTPS. En este punto, los usuarios pueden ingresar a su repositorio sin tener una cuenta en ningún lado. Si simplemente es una tienda pequeña, probablemente esté bien, especialmente porque puede usar la capacidad de Mercurial para firmar los conjuntos de cambios para garantizar un nivel mucho más alto de verificabilidad de lo que proporcionará HTTP Basic.

Para una tienda más grande, sin embargo, tendría toda la razón al querer al menos una barrera simple para cometer. Para hacer eso, necesitas hacer dos cambios. En primer lugar, deberá colocar a Mercurial detrás de un servidor web con soporte de proxy inverso o soporte CGI. Afortunadamente, las versiones recientes de IIS admiten ambas. Puede consultar the CGI directions in the Mercurial Redbook para conocer los pasos específicos de Mercurial y Microsoft's guide to setting up CGI applications in IIS 6 para obtener ayuda sobre el lado de IIS.

A continuación, deberá configurar una autenticación básica. IIS proporciona HTTP Basic out-of-the-box, que, como bonificación, puede autenticarse directamente en su dominio, lo que reduce al mínimo los gastos administrativos.

Finalmente, querrá cambiar la línea allow_push para admitir solo usuarios específicos al especificar una lista de nombres de usuario delimitada por comas. Por ejemplo:

allow_push = benjamin, ted, the_cow 

Eso es todo. Mercurial ahora permitirá el empuje de los usuarios que pueden autenticarse a través de la autenticación HTTP básica, y permite que los demás lo atrapen.

+0

Probando esto actualmente. ¡Tiene algunas dificultades para configurar esto pero parece muy prometedor! No sabía que Mercurial proporcionó un script CGI para la publicación web. –

+0

Creo que estoy casi allí. La secuencia de comandos CGI se ejecuta en shell pero tiene errores de IIS. –

+0

¡Lo tengo trabajando! –

2

Para un equipo que da el primer paso fuera de VSS, habría sugerido usar SubVersion para control de fuente y TortoiseSVN o VisualSVN para el cliente.

Pero si el equipo ha tomado la decisión de cambiar a un DVCS entonces sugeriría Mercurial porque es better support for HTTP and windows on the client via TortoiseHg.

+0

Creo que la mayoría de nuestros desarrolladores están familiarizados con el control de código fuente no VSS como Subversion. Uno de los requisitos más importantes eran los compromisos locales que Subversion no admite. En base a otras respuestas de DVCS aquí en SO, llegué a la conclusión de que Mercurial probablemente sería la mejor opción, pero no pude encontrar la manera de alojar el repositorio central de Windows con la rápida búsqueda en Google. ¡Gracias por la opinión! –

12

Después de que Benjamin señalara las secuencias de comandos de CGI que servían HTTP, decidí probarlas y logré obtener un repositorio alojado a través de HTTP. The Redbook que Benjamin unió fue de mucha ayuda como lo fueron dos artículos de Mercurial wiki. Uno que describe Mercurial publishing en general y otro que contiene step by step instrucciones para configurar el script HgWebDir CGI.

Estas instrucciones no eran completamente infalibles, así que tuve que asomarme un poco. Lo más probable es que esté ejecutando Vista de 64 bits. Las instrucciones a continuación documentan lo que hice. Ahora que lo hice una vez, probablemente haría las cosas en otro orden, así que no considere estas instrucciones paso a paso.

Mercurial

Primero adquirió el binario Mercurial desde las http://mercurial.berkwood.com/ que consiguió instalarse en d:\dev\Mercurial. Creé un repositorio para probar bajo el repositorio d:\dev\testRepo usando hg init. El d:\dev\Mercurial\library.zip contiene archivos de biblioteca Mercurial requeridos por el script CGI, por lo que se extrajeron en d:\dev\Mercurial\library. Algo que me confundió al principio es que cuando abrí el archivo comprimido recibí un mensaje de error y no vi ningún contenido. Sin embargo, solo se extrajo el archivo a un directorio trabajado.

Para la secuencia de comandos web, descargué Mercurial source que contenía el hgwebdir.cgi que se movió y renombró a d:\dev\Mercurial\webroot\hgwebdir.py. El artículo paso a paso contiene buenas instrucciones para modificar el script hgwebdir para Windows. También contienen instrucciones para hgweb.config que en mi caso terminó con este aspecto:

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

también el repositorio querían la siguiente configuración para que pudiera empujar allí sin SSL.Tenga en cuenta que estoy usando la Autenticación básica para autenticar usuarios actualmente. Tenía que crear la configuración en D:\dev\Mercurial\testRepo\.hg\hgrc y añadir las siguientes líneas a la misma:

[web] 
allow_push = * 
push_ssl = false 

Python

El script CGI es un script en Python por lo que requiere Python. Parece bastante exigente con la versión de Python que lo ejecuta. Uno de los artículos mencionados que ejecuta requiere la misma versión que se utilizó para construir el Mercurial. Al final lo conseguí trabajando en Python 2.5 x86 después de probar Python 2.6 x64, Python 2.4, Python 2.5 x64.

IIS

dos cosas que se perdió y tuvo que instalar también el del apoyo CGI y autenticación básica. Ambos se instalaron a través del Panel de control, Programas y Características. Una vez hecho esto con la instalación, creé un directorio virtual (que más tarde cambié a una Aplicación) en IIS que apuntaba al D:\dev\Mercurial\webroot. El directorio virtual requería un controlador CGI para los archivos * .py que se podían agregar desde las asignaciones de controladores. El ejecutable era D:\dev\SDKs\Python25_x86\Python.exe %s. Una vez que IIS tenía permisos para el directorio webroot, podía navegar al http://localhost/hg/hgwebdir.py/test y ver el repositorio.

Así que ahora el acceso de lectura funcionaba. Cuando traté de ingresar al repositorio, recibí mensajes de error extraños que me indicaban que no era un repositorio real.

Después de una hora de depuración terminé copiando todo el árbol D:\dev\Mercurial\library\mercurial en webroot para que Python pudiera encontrar D:\dev\Mercurial\webroot\mercurial\hgweb\hgwebdir_mod.pyc. Después de este Wireshark estaba informando los errores de acceso denegado en el seguimiento de la pila. No tenía idea de cuál era la verdadera razón para esto, sino de convertir el directorio virtual en una Aplicación en IIS y moverlo sobre un grupo de aplicaciones que se ejecutó utilizando la cuenta del Sistema Local y los errores de acceso denegado desaparecieron.

También en algún momento di la clave de registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters más permisos para que IIS pudiera acceder a ella. Duda de que los requiera después de usar la cuenta del Sistema local.

¡Una vez que terminaron de empujar cosas al depósito usando hg push http://localhost/hg/hgwebdir.cgi/test, estaba funcionando!

Problemas y soluciones

  • dónde encontrar los archivos de la biblioteca.
    • Estaban en el archivo library.dll en la carpeta de instalación de Mercurial. Solo tuve que extraerlos aunque mi programa de descompresión se negara a ver su contenido.
  • cómo obtener la secuencia de comandos de Python para ejecutar
    • descargar la versión correcta de Python para la arquitectura x86 como el script usa algunas bibliotecas x86. La versión correcta de Python depende de la versión de Mercurial. Para 1.2.1 era Python 2.5 x86.
    • Alternativamente, podrías intentar construir Mercurial a partir de fuentes con la versión de Python que quieras, pero en mi caso esto falló al crear extensiones.
  • Cómo configurar CGI en IIS
    • primer lugar asegúrese de CGI se instala en IIS. No se asumió que esto era cierto en las instrucciones de IIS que publicó Benjamin.
    • Cree una nueva asignación de módulo para * .py en asignaciones de controlador IIS. El módulo correcto es CgiModule y el ejecutable es su Python ejecutable +% s
  • Cómo permitir el guión CGI va a escribir en el repositorio
    • Asegúrese de que el guión tiene todo lo que necesita. Tuve que mover el library\mercurial\hgweb\hgwebdir_mod.pyc a otro lugar.
    • Asegúrate de que el script tenga permisos para donde quiera. Lo resolví creando un nuevo grupo de aplicaciones para el script CGI que usaba la cuenta del sistema local, convirtiendo el directorio virtual en una aplicación en IIS y seleccionando el nuevo grupo de aplicaciones.
+1

¡Muchas gracias por proporcionarnos un recorrido de exactamente lo que tenía que hacer! Combinaré su consejo en el libro y lo enviaré al autor para su inclusión. –

0

Si usted está buscando:

  1. de apoyo al desarrollo distribuido
  2. servidores
  3. Ejecutar Windows a la perfección
  4. y una gran interfaz gráfica de usuario

Estás describiendo exactamente Plastic SCM

7

Después de leer la Respuesta de Mikko que casi funcionó para mí, se me ocurrieron mis propias notas para la instalación. Mi configuración fue diseñada para ser un repositorio "no protegido y abierto" que los miembros de mi equipo podrían usar instalado en un servidor de Windows 2008.

1. Instale Python.

La versión de Python que utilicé fue Python 2.6.2 y usé el instalador Windows x86 MSI.

  • Instalar para todos los usuarios.
  • Instalar en C: \ Mercurial \ Python
  • Usar opciones de características predeterminadas.

2. Instale MinGW.
La versión de GNU minimalista para Windows que utilicé fue MinGW 5.1.4

  • Instalar el MinGW-5.1.4.exe.
  • Elija la opción Descargar e instalar.
  • Elija la opción del paquete actual para instalar.
  • Para los componentes que se instalarán Seleccione la opción "Mínimo".
  • Instalar a C: \ Mercurial \ MinGW

3. Modificar su camino.

Necesita agregar ubicaciones a su ruta ambiental en este punto.

  • Add 'C: \ Mercurial \ Python26; C: \ Mercurial \ MinGW \ bin' (. El orden es importante) a la ruta

4. Instalar Mercurial.

La versión de mercurial que utilicé fue la última versión en la rama estable y no usé los binarios, pero usé el código fuente. Quería compilar mercurial para que funcionara con la versión de Python que tenía instalada, así que no tenía que preocuparme por problemas de compatibilidad, que me pareció el mayor desafío con otros métodos de instalación. La forma más fácil de obtener la fuente es descargando el archivo "zip". Mercurial Stable Release

  • Extracto de archivos Zip a C: \ Mercurial \ Source.
  • Genere la fuente en el símbolo del sistema.
 
python setup.py build --force -c mingw32 
python setup.py install --force --skip-build

5. Modificar su camino.

Debe insertar en su ruta ambiental otra ubicación para el comando 'hg'.

  • Add 'C: \ Mercurial \ Python26 \ Scripts; C: \ Mercurial \ Python26; C: \ Mercurial \ MinGW \ bin' a la trayectoria (. El orden es importante)

6. Crea tu archivo de configuración.

Debe tener un conjunto de nombres de usuario predeterminado si va a hacer algún commit localmente en este servidor.

  • Crear archivo '"C: \ Documents and Settings {usuario} .hgrc"'
[ui] 
editor = Notepad 
username = your_name

6. Prueba de su instalación.

Abra una nueva ventana de comandos y pruebe con 'hg debuginstall' para validar. Deberías ver algo como lo siguiente.

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

7. Configurar el directorio web.

  • Crear directorio 'C: \ Mercurial \ Web'
  • Copia el archivo hgwebdir.cgi de la 'C: \ Mercurial \ Fuente' a 'C: \ Mercurial \ Web '

8. Configure IIS7 para Repositorio centralizado.

Utilicé DefaultAppPool que está utilizando .Net 2.0, Pipeline = Integrated, Identity = ApplicationPoolIdentity.

  • Asegúrese de que las funciones CGI estén disponibles en IIS7.
  • Panel de control/Programas/características de Windows/IIS/características de desarrollo de aplicaciones/CGI
  • Añadir aplicación en IIS en el sitio web que desea.
  • Alias ​​= Mercurial - Ruta física = C: \ Mercurial \ Web
  • En la aplicación, seleccione Módulos HTTP y agregue una nueva asignación de módulos.
    • Ruta de solicitud = *. Cgi, Módulo = CgiModule, Ejecutable = C: \ Mercurial \ Python26 \ python.exe% s, Nombre = Mercurial.
    • Cuando se le pida que agregue una entrada a la lista de restricciones de ISAPI y CGI, responda que sí.

9. Comprobación de la configuración Web.

Ahora debería poder navegar http://localhost/Mercurial/hgwebdir.cgi y ver y vaciar la lista de repositorios.

10. Configurar IIS 7 para Friendly URL

no le gustaba tener la URL antipático y este paso nos permite volver a asignar la dirección URL a algo más amigable. Instale la extensión URL Rewrite Moduel 1.1 para IIS.

  • En la aplicación de IIS Mercurial en el Administrador de IIS Características: Selección de vista de reescritura de URL de componentes e instalar una nueva regla.
  • Elija Agregar reglas, luego la plantilla 'Regla con reescribir el mapa'. Regla Action = reescritura, especifique Reescritura Mapa = Mercurial
  • Añadir una entrada de asignación. OriginalValue = '/ Mercurial/Repo', el nuevo valor = '/ Mercurial/hgwebdir.cgi'

11. Crear Mercurial Repositorio

Ahora puede crear un repositorio de pruebas.

  • Cree un directorio C: \ Mercurial \ Repository y asegúrese de que la cuenta IUSR tenga los permisos para escribir en el directorio. (Si en la cuenta de dominio es más como IUSR_ NombreDeEquipo} {
  • crear el archivo C:. \ Mercurial \ Web \ hgweb.config a la lista de los repositorios.
[paths] 
/= C:\Mercurial\Repository\**
  • Añadir un directorio C: \ Mercurial \ Repository \ Prueba e inicializar el repositorio con 'hg init'

** Si usted quiere ahora ser capaz de empujar sin SSL crear en el directorio .hg del repositorio un archivo hgrc las siguientes líneas.

[web] 
allow_push = * 
push_ssl = false

Referencias:

Mercurial Wiki Windows Install
HG Book
Step by Step
Publishing Mercurial Repositories

+1

¡Gran guía! Sugiero usar "hg debuginstall" para verificar la instalación. Y el libro de Bryan normalmente se llama "HG Book" :-) –

+0

¡Agradable! Tengo curiosidad por lo que necesita el MinGW para? Creo que ya lo tengo instalado en todas mis computadoras, pero no creo que Mercurial o Python lo usen. También creo que voy a moverme a un repositorio abierto también. Realmente no he seguido con Mercurial después de haber tenido problemas con la autenticación del usuario. No puedo usar la autenticación integrada de Windows a través de Mercurial y con la autenticación básica. Mercurial no recuerda las credenciales como lo hace Subversion. –

+0

Usé MinGW para la compilación. Puede elegir otros compiladores que crea y especificarlos en la línea de compilación. python setup.py build --force -c mingw32 – degnome

0

excusa mi necroposting y la auto-promoción descarada, pero he acaba de lanzar una versión alfa de HgLab, que es un servidor Mercurial para Windows con full soporte pull-push e integración de Active Directory.

+0

IIS ** y ** SQL Server ** y ** Windows Server 2003 o superior en la lista de requisitos es excesivo desde mi POV –

+0

@LazyBadger ¿Por qué? –

+0

Simplemente opinión personal: prefiero soluciones con cantidad mínima de * any * dependencias, deps pesado es Stop-sign (para mí) –

0

SMC-agnóstico (hasta cierto punto) de Windows-solución con Repositorio-frontend y la gestión de hoy puede ser SCM-Manager (Git, Mercurial, SVN repo de una caja con un único requisito de la JVM)

Cuestiones relacionadas