Estoy en el proceso de configurar un servidor de Git (1.7.2.3) en una máquina WS 2008 usando Apache y git-http-backend.exe. He estado siguiendo un buen tut here. Tengo el trabajo GUI, puedo annoymously clon y si pongo el siguiente en la configuración de un acuerdo de recompra me puedo empujar annoymously:Configuración de Git Server en Windows con git-http-backend.exe
[http]
receivepack = true
he añadido lo siguiente al archivo httpd.conf:
SetEnv GIT_PROJECT_ROOT C:/GIT/Repositories
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAliasMatch \
"(?x)^/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
"C:/Program Files (x86)/git/libexec/git-core/git-http-backend.exe/$1"
<Directory />
Allow from all
</Directory>
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile C:/GIT/ApacheConfig/users
AuthGroupFile C:/GIT/ApacheConfig/groups
Require group repogeneral
</LocationMatch>
Cuando agrego el "LocationMatch" todavía puedo clonar annoymously o especificando un nombre en la URL, git clone http://[email protected]
se le pedirá una contraseña y clon.
pero cuando intento de hacer retroceder al repositorio consigo el siguiente:
de error: No se puede acceder a la URL http://[email protected]/newtestrepo.git/, código de retorno 22 fatal: git-http-push no
he estado buscando en el http-backend.exe man page para obtener ejemplos, pero no puede hacer que funcionen.
aquí es mi archivo de grupos, (esto es sólo probando ejemplos así que nada que serían utilizadas en prod):
admin: jon steve admin
webview: jon steve web
repogeneral: jon steve
testrepo: jon admin
testrepo2: jon steve web
aquí es el archivo de los usuarios:
jon:$apr1$kEKVExYx$guIF9oYV8buGhFLZr16XN0
steve:$apr1$jvgjF9nv$PvWsHH.cSOBN5ymk6NT1B0
admin:$apr1$vzXgDskN$oszCei3tkHNUgtLj2HkHF/
web:$apr1$wS0do7hb$VA9tsc9c9LwY5PcjfhdwK0
Sé que el nombre de usuario jon funciona como si puse el requisito de directorio en la sección de GUI puedo iniciar sesión con el nombre de usuario JON no hay problema, (apunta a los mismos archivos de usuario y grupo que lo hace la coincidencia de ubicación).
No estoy seguro de qué configuración me he perdido en este punto, (suponiendo que es un problema de configuración).
Cualquier consejo sobre cómo superar este último obstáculo sería fantástico.
EDITAR
He estado jugando un poco más y aquí está la información que tengo:
si clonar una cesión temporal con:
git clone http://[email protected]/remotetest.git
puedo conseguir el repositorio a cabo, pero cuando intento y retrocedo con:
git push origen maestro
me preguntan por mi contraseña, entro en él, entonces le pide de nuevo, entonces me sale el siguiente error:
C: \ temp \ RemoteTest \ RemoteTest> git push origin master Contraseña: contraseña : de error: no se puede acceder a la URL http://[email protected]/remotetest.git/, código 22 volver fatal: git-http-push no
En mi acceso de Apache.ingrese consigo el siguiente:
192.168.1.2 - - [29/Sep/2010:21:58:19 +0100] "GET /remotetest.git/info/refs?service=git-upload-pack HTTP/1.1" 200 38
192.168.1.2 - - [29/Sep/2010:21:58:51 +0100] "GET /remotetest.git/info/refs?service=git-receive-pack HTTP/1.1" 403 -
192.168.1.2 - - [29/Sep/2010:21:58:51 +0100] "GET /remotetest.git/info/refs HTTP/1.1" 200 -
192.168.1.2 - - [29/Sep/2010:21:58:51 +0100] "GET /remotetest.git/HEAD HTTP/1.1" 200 23
Curiosamente cuando clon con el nombre de usuario en la URL que no importa lo que la contraseña que puse en, todavía trabajar. Estoy asumiendo que esto se debe a que debería poder tirar de forma anónima. No estoy seguro de por qué pide una contraseña en ese momento.
también veo esto en el error de los registros:
[Wed Sep 29 22:33:00 2010] [error] [client 192.168.1.2] client denied by server configuration: C:/Program Files (x86)/Git/libexec/git-core/git-http-backend.exe
[Wed Sep 29 22:33:00 2010] [error] [client 192.168.1.2] client denied by server configuration: C:/Program Files (x86)/Git/libexec/git-core/git-http-backend.exe
EDIT 2
He intentado recrear el archivo de contraseñas haciendo:
htpasswd -c -m C:/git/apacheconfig/users jon
pero esto no ayuda .
EDITAR 3
la configuración de PHP en httpd.conf donde se utiliza el mismo archivo de usuarios de autenticación básica:
<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs">
AuthName "GitUsers"
AuthType Basic
AuthUserFile C:/GIT/ApacheConfig/users
AuthGroupFile C:/GIT/ApacheConfig/groups
require group webview
</Directory>
EDITAR 4
OK para que pueda obtener clonar y empujar en modo anómalo felizmente, pero la autenticación falla para el empuje.
C:\temp\test2\temp\test>git push origin master
Password:
Password:
error: Cannot access URL http://[email protected]:8000/repositories/test.git/, return code 22
fatal: git-http-push failed
he cambiado el httpd.conf para utilizar el siguiente:
<VirtualHost *:80>
SetEnv GIT_PROJECT_ROOT "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/repositories"
SetEnv GIT_HTTP_EXPORT_ALL
<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/repositories">
Options Indexes FollowSymLinks MultiViews Includes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<LocationMatch "^/repositories/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/repositories/.htpasswd"
Require valid-user
</LocationMatch>
ScriptAliasMatch \
"(?x)^/repositories/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
"C:/Program Files (x86)/Git/libexec/git-core/git-http-backend/$1"
ErrorLog C:/GIT/error_log
CustomLog C:/GIT/access_log combined
</VirtualHost>
Curiosamente, cuando he creado una nueva operación (git init --bare newrepo.git) No creó una información/refs archivo. Tuve que hacer el comando "git update-server-info" para crear eso.
Los registros de acceso de Apache tienen algo interesante que podría ser una pista:
192.168.10.97 - - [05/Oct/2010:22:48:26 +0100] "GET /repositories/test.git/info/refs?service=git-receive-pack HTTP/1.1" 200 -
192.168.10.97 - - [05/Oct/2010:22:48:26 +0100] "GET /repositories/test.git/HEAD HTTP/1.1" 200 23
192.168.10.97 - - [05/Oct/2010:22:48:28 +0100] "PROPFIND /repositories/test.git/ HTTP/1.1" 405 248
Eso es cuando yo estaba tratando de "empuje" de vuelta al repositorio, pero son los comandos de obtención y ningún puesto. no estoy seguro de qué es PROPFIND, todavía no se ha encontrado mucha información sobre eso. Creo que, (leyendo), podría haber algún tipo de reescritura, que es cambiar el POST a un GET y matarlo, o algo así. Sin embargo, estoy fuera de mi profundidad en este momento.
Gracias
No estoy seguro de por qué "' htdocs'" entra en la imagen en términos de' Directory'definition. – VonC
que es la ubicación predeterminada de Apache para servir archivos. Uso PHP gui para mostrar los repositorios, esto usa el mismo archivo authuser y da el inicio de sesión emergente y funciona con el mismo nombre de usuario y contraseña. usándolo como una prueba para asegurarse de que Apache pueda entender el archivo de contraseñas de los usuarios. – Jon
Esta pregunta debe estar en http://serverfault.com/ ya que se trata menos de programación y más con configuración y configuración, ¿no? –