Alojamiento del repositorio de Git en Windows

108

¿Existe actualmente alguna forma de alojar un repositorio Git compartido en Windows? Entiendo que puede configurar el servicio Git en Linux con:

git daemon

¿Existe una opción nativa de Windows, además de compartir carpetas, para alojar un servicio Git?

EDITAR: Actualmente estoy usando la instalación cygwin de git para almacenar y trabajar con repositorios de git en Windows, pero me gustaría dar el siguiente paso para alojar un repositorio con un servicio que pueda brindar acceso a otros.

Jeff Fritz
fuente
35
Mi empleador actual no tiene ninguna máquina Unix o Linux ... traer un nuevo proveedor de control de fuente y un nuevo sistema operativo al mismo tiempo puede ser un poco ... traumático.
Jeff Fritz
1
¿Qué pasa con git-daemon? AFAIK, funciona bien en Windows.
Aristóteles Pagaltzis
10
La instalación de Git con el instalador estándar de msysgit para Windows no parece instalarse git daemon. : \
Tim Visher
1
Hay un instalador de CopSSH y msysgit incluido que es posible que desee ver. Utiliza autenticación de clave pública y lo hace fácil. Descargo de responsabilidad: soy el webmaster; comencé el proyecto después de leer el tutorial de Tim Davis sobre cómo configurar un servidor git seguro.
Lilith River
3
Para el registro: Git para Windows ha incluido una versión funcional de git daemon desde la versión 1.7.4 (publicada en febrero de 2011). Entonces cygwin ya no es necesario. Consulte también stackoverflow.com/q/5186070/291641
patthoyts

Respuestas:

75

Aquí hay algunos pasos que puede seguir para que el demonio git se ejecute en Windows:

(Requisitos previos: una instalación predeterminada de Cygwin y un cliente git que admita git daemon)

Paso 1 : abre un shell bash

Paso 2 : En el directorio / cygdrive / c / cygwin64 / usr / local / bin /, cree un archivo llamado "gitd" con el siguiente contenido:

#!/bin/bash

/usr/bin/git daemon --reuseaddr --base-path=/git --export-all --verbose --enable=receive-pack

Paso 3 : Ejecute el siguiente comando cygrunsrv desde un indicador elevado (es decir, como administrador) para instalar el script como un servicio (Nota: se supone que Cygwin está instalado en C: \ cygwin64):

cygrunsrv   --install gitd                          \
            --path c:/cygwin64/bin/bash.exe         \
            --args c:/cygwin64/usr/local/bin/gitd   \
            --desc "Git Daemon"                     \
            --neverexits                            \
            --shutdown

Paso 4 : Ejecute el siguiente comando para iniciar el servicio:

cygrunsrv --start gitd

Estás listo. Si desea probarlo, aquí hay un script rápido y sucio que muestra que puede enviar el protocolo git a su máquina local:

#!/bin/bash

echo "Creating main git repo ..."
mkdir -p /git/testapp.git
cd /git/testapp.git
git init --bare
touch git-daemon-export-ok
echo "Creating local repo ..."
cd
mkdir testapp
cd testapp
git init
echo "Creating test file ..."
touch testfile
git add -A
git commit -m 'Test message'
echo "Pushing master to main repo ..."
git push git://localhost/testapp.git master
Derek Greer
fuente
2
Si pudiera editar esta publicación, agregaría lo siguiente: Requisitos previos: cygwin con los paquetes git y cygrunsrv instalados.
Mario
2
Otra nota: califique completamente la ruta para git dentro del script de shell gitd. En una de mis máquinas, MSYSGit se estaba iniciando en lugar de cygwin-git cuando se ejecutaba como un proceso de Windows. MSYSGit no admite el modo demonio, por lo que el servicio no se pudo iniciar.
Mario
26
Nunca consideré que las soluciones Cygwin "funcionaran en Windows". Es como decir "ejecutar Linux en una VM funciona en Windows". Pero esa es solo mi opinión purista;)
Rook
3
nota rápida: / usr / bin no funcionó para mí, pero colocar en / bin funcionó (y usar c: / cygwin / bin / gitd en cygrunsrv). No estoy seguro de la antigüedad de mi instalación de cygwin, pero parece que / usr / bin es un enlace a lo que hay en / bin que Windows no conoce ... También es un poco obvio, pero recuerde crear la carpeta / git en c: / cygwin /
armyofda12mnkeys
3
@Rook: por el contrario, el conjunto de herramientas Cygwin no es diferente de cualquier otra aplicación de terceros que pueda instalar. Cygwin no es una máquina virtual, sino un conjunto de herramientas preempaquetadas. Es solo un conjunto de archivos ejecutables y DLL de Windows, como todo lo demás en su máquina.
Derek Greer
16

GitStack podría ser su mejor opción. Actualmente es gratuito (para hasta 2 usuarios) y de código abierto al momento de escribir este artículo.

poiuytrez
fuente
2
Parece que estaba restringido a proyectos de estudiantes o de código abierto: "¡GitStack es gratuito para proyectos de estudiantes y de código abierto!"
ccellar
12

Aquí hay un servidor git dedicado para Windows: https://github.com/jakubgarfield/Bonobo-Git-Server/wiki

Daniel O
fuente
¿Cuál es el estado del servidor Bonobo? ¿Es completamente funcional? No puedo decirlo por los documentos, pero parece muy convincente.
Jeff Fritz
1
@JeffFritz: acabo de dejar de usarlo. La maldita cosa no actualiza el estado del repositorio ( git update-server-info) después de la inserción HTTP, y esta lógica no está implementada por su biblioteca Git (GitSharp). Dudo que alcance un estado de funcionamiento real en el corto plazo.
André Caron
Además, no funciona con Teamcity (que es la razón principal por la que no lo uso) github.com/jakubgarfield/Bonobo-Git-Server/issues/11
Piers Karsenbarg
3
Feliz usuario de Bonobo aquí. Creo que las preocupaciones de Andre y Piers deberían resolverse ahora. Ese problema de TeamCity se marcó como cerrado y no he tenido ningún problema con el uso de un repositorio centralizado.
Quinn Bailey
9

Si está trabajando en un entorno Windows, ¿ha considerado Mercurial ? Es un sistema de control de versiones distribuido como Git, pero se integra mucho más ordenada y fácilmente con Windows.

David Arno
fuente
9
Es cierto que es mucho más fácil usar Mercurial en máquinas con Windows, al menos en lo que respecta a poder sincronizar repositorios. ¡Sin embargo, no es una respuesta muy útil si realmente tienes que usar Git!
Frank Shearar
También Bazaar funciona de forma nativa en Windows; incluso cuenta con soporte comercial.
Hasen
7

Si obtiene el error cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: The service has not been started.después de ejecutar el comando:

cygrunsrv --start gitd

eso significa que no creó la carpeta 'ruta base'.

Crear la carpeta '/ git' y volver a ejecutar el comando solucionará este problema.

Isaac
fuente
También puede obtener este error si sus /gitpermisos NTFS no permiten el acceso de lectura / escritura de la cuenta de servicio (SISTEMA).
spoulson
5

Actualmente estoy usando el demonio ssh de cygwin en Windows para servir y permitir el acceso remoto a mi repositorio. Funciona bastante bien, tengo un control completo sobre quién accede a mi repositorio mediante sus certificados ssh y el rendimiento se dispara, incluso a través de enlaces WAN y VPN remotos.

Otra solución es utilizar Gitosis . Es una herramienta que facilita el alojamiento de repositorios.

Matthew McCullough
fuente
¿Cómo consiguió que el demonio git funcionara con cygwin? Tengo la configuración del demonio ssh y estoy probando el inicio de sesión en mi máquina a través de ssh, pero siempre que intento ejecutar el demonio git, simplemente se cuelga.
Thiru
¿Cómo consiguió que la gitosis funcionara en Windows ya que hay un error ?: github.com/res0nat0r/gitosis/issues#issue/1
dalore
4

No necesita alojar un servicio, también puede crear un repositorio compartido en una unidad compartida. Simplemente cree un repositorio simple. Puede clonar un repositorio existente en uno compartido usando: "git clone --bare --shared [fuente] [dest]". También puede iniciar un nuevo repositorio usando "git init --bare --shared = all".

Henk

Henk
fuente
3
Sí, puede crear un repositorio compartido en una unidad, pero NO podré acceder a ese repositorio a menos que esté en la misma red que el repositorio. El objetivo de la pregunta es permitir el acceso remoto a un repositorio para un compañero de trabajo que trabaja fuera del sitio
Jeff Fritz
3
Esto no es realmente una solución a la pregunta y parece algo bastante cuestionable de hacer de todos modos.
Pat O
4

¡Ahora msysGit soporta git daemon! Funciona bien (al menos para mí). Voy a intentar que funcione como servicio ...

Artem
fuente
¿Soporta tanto empujar como tirar? Porque hay un problema code.google.com/p/msysgit/issues/detail?id=457 al hacer push .
Vadim
Entonces, ¿tienes esto funcionando como un servicio? ¿Conoce una guía de "introducción"?
Craig McQueen
4

Gerente de SCM

  • Servidor http ligero para repositorios Git, Mercurial, Subversion desde una caja (solo se necesita Java)
  • Interfaz web para la gestión de usuarios, ACL, repositorios
Tejón perezoso
fuente
2

En Windows, también puede servir repositorios de Git con Apache a través de HTTP o HTTPS, utilizando la extensión DAV.

La ruta del repositorio de Git se puede proteger con comprobaciones de autenticación de Apache, como restringir a ciertas direcciones IP o autenticación de tipo htpasswd / htdigest.

La limitación de usar la autenticación htpasswd / htdigest es que el nombre de usuario: contraseña se pasa en la URL de Git solicitada, por lo que es mejor restringir el acceso a la URL de Git a ciertas direcciones IP.

Editar: Tenga en cuenta que puede dejar la contraseña fuera de la URL de Git y Git le pedirá la contraseña al presionar y recuperar / extraer.

Usar HTTPS significa que todos los datos están encriptados en la transferencia.

Es bastante fácil de configurar y funciona.

El siguiente ejemplo muestra la combinación de control de acceso por dirección IP y usuario: contraseña sobre HTTP estándar.

Ejemplo Apache Virtualhost

## GIT HTTP DAV ##
<VirtualHost *:80>

  ServerName git.example.com
  DocumentRoot C:\webroot\htdocs\restricted\git
  ErrorLog C:\webroot\apache\logs\error-git-webdav.log

    <Location />
      DAV on
      # Restrict Access
      AuthType Basic
      AuthName "Restricted Area"
      AuthUserFile "C:\webroot\apache\conf\git-htpasswd"
      # To valid user
      Require valid-user
      # AND valid IP address
      Order Deny,Allow
      Deny from all
      # Example IP 1
      Allow from 203.22.56.67 
      # Example IP 2
      Allow from 202.12.33.44 
      # Require both authentication checks to be satisfied
      Satisfy all
    </Location>

</VirtualHost>

Ejemplo .git / config

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = http://username:[email protected]/codebase.git
[branch "master"]
    remote = origin
    merge = refs/heads/master
David Thomas
fuente
2

En el trabajo, estoy usando GitBlit GO instalado en un servidor Windows. Trabaje sin problemas e integre bien con ActiveDirectory para la autenticación y autorización de usuarios. También es gratuito y de código abierto (con licencia Apache)

Página de inicio de GitBlit

Solo se admite el acceso HTTP (S), no SSH, pero en Windows no debería necesitar nada más.

Gian Marco
fuente
Tienen compatibilidad con SSL (HTTPS) según el documento de configuración del sitio.
Dandré
Sí, se admiten HTTP y HTTPS (estoy usando HTTPS exclusivamente) pero no SSH. Respuesta actualizada.
Gian Marco
2

esta es una respuesta de 2015 a una pregunta que tiene más de 7 años.

Por un pago único de $ 10, desde https://bitbucket.org/product/server , se puede comprar una licencia de Windows de 64 bits para hasta 10 usuarios .

Aparentemente, las versiones de 32 bits solo están disponibles a través de su archivo.

Bitbucket Server se conocía anteriormente como Stash .

Tenga en cuenta que no he probado esta versión, pero $ 10 parece una buena oferta; aquí leí que Atlassian dona los $ 10 a la caridad. FWIW

gerryLowry
fuente
0

Creo que lo que Henk está diciendo es que puedes crear un repositorio compartido en una unidad y luego copiarlo en una ubicación común a la que ambos tengan acceso. Si hay algún servidor de la empresa o algo al que ambos tengan acceso ssh, puede colocar el repositorio en algún lugar donde pueda SCP de nuevo en su propia computadora, y luego extraerlo. Hice esto por mí mismo por un tiempo, ya que tengo dos computadoras. Es una molestia, pero funciona.

Ibrahim
fuente
2
"A falta de compartir carpetas", dice la pregunta original.
Lightness Races in Orbit
0

Para Windows 7 x64 y Cygwin 1.7.9 necesitaba usar / usr / bin / gitd como argumento args de cygrunsrv

cygrunsrv   --install gitd                          \
            --path c:/cygwin/bin/bash.exe           \
            --args /usr/bin/gitd                    \
            --desc "Git Daemon"                     \
            --neverexits                            \
            --shutdown

Además, necesitaba ejecutar bash como administrador para instalar el servicio.

disrvptor
fuente