J'essaie de configurer un HTTP intelligent en utilisant git-http-backend. J'ai essayé de suivre beaucoup de documentation/guides en ligne sur la façon de le faire. Je suis en cours d'exécution Apache 2.4 sur Windows 7. Dans mon httpd.conf jeLe protocole HTTP Git Smart ne parvient pas à exécuter des hooks côté serveur sur push
SetEnv GIT_PROJECT_ROOT c:/repos
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ "c:/program files/git/mingw64/libexec/git-core/git-http-backend.exe/"
<LocationMatch "^/git/.*/git.*$">
Require all granted
</LocationMatch>
<Directory "c:/program files/git/mingw64/libexec/git-core/">
<Files "git-http-backend.exe">
Require all granted
</Files>
</Directory>
Pour C:\repos
, je me suis assuré que tout le monde a accès. Je cours httpd.exe sous mon compte d'utilisateur ainsi les demandes faites au serveur devraient voir git 2.12.2 juste bien sur le chemin. En C:\repos
, j'ai un repo nu appelé foo.git
. À l'intérieur de ce repo, je fais git config http.receivepack true
. J'ai été capable de cloner très bien avec http://localhost/git/foo.git. Sans les crochets côté serveur activés, j'ai été en mesure de pousser un commit très bien.
Maintenant, la partie ennuyeuse - je créer un crochet de mise à jour qui est juste C:\repos\foo.git\hooks\update
qui contient les éléments suivants:
#!/bin/bash
echo foo
exit 0
J'essaie de pousser le repo local et obtenir
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 315 bytes | 315.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://localhost/git/foo.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'http://localhost/git/foo.git'
Ok, donc J'essaie de pousser la même chose avec le protocole git - je cours git daemon --reuseaddr --base-path=C:\repos C:\repos
. Ensuite, je mets un git-daemon-export-ok
à l'intérieur foo.git
. Je reviens à la mise en pension et pousser local git:///foo.git
:
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 315 bytes | 35.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: foo
To git:///foo.git
3b33593..6af841c master -> master
Tout va bien. Je pousse avec le protocole de fichier - file:///c/repos/foo.git
et cela fonctionne bien aussi.
J'ai essayé de faire une
<Directory c:/>
Require all granted
</Directory>
dans mon httpd.conf pour vous assurer qu'il n'a rien à voir avec les problèmes d'accès. Je suis revenu à Require all denied
bien sûr. Sur la base d'un push verbeux, il semble que git-receive-pack ne puisse pas démarrer l'interpréteur bash côté serveur, mais je ne sais pas pourquoi. Encore une fois, il est issu d'un httpd.exe qui fonctionne sous mon compte utilisateur et je peux exécuter git juste bien manuellement. Et encore, git peut être trouvé sur le chemin juste très bien. Quel genre de solution évidente manque-t-je ici?