J'ai un référentiel Git dans un répertoire servi par Apache sur un serveur. J'ai configuré WebDAV et il semble fonctionner correctement. Litmus renvoie 100% de succès.
Je peux cloner mon référentiel à partir d'un hôte distant, mais le message d'erreur suivant s'affiche lorsque j'essaie de transmettre par HTTP ou par https:
error: Impossible d'accéder à l'URL https://git.example.com/repo/ , code retour 22 fatal: git-http-Push a échoué
Une idée?
Il est fortement recommandé de NE PAS utiliser WebDAV si possible. Si vous devez utiliser HTTP/HTTPS, l'utilisation du script git-http-backend CGI est recommandée par rapport à WebDAV.
Modifiez la section suivante de votre fichier .git/config:
[remote "Origin"]
fetch = +refs/heads/*:refs/remotes/Origin/*
url = http://git.repository.url/repo.git
à
[remote "Origin"]
fetch = +refs/heads/*:refs/remotes/Origin/*
url = http://username:[email protected]/repo.git
Ensuite, essayez git Push Origin master
.
Modifiez les informations d'authentification dans vos fichiers de configuration pour les autres URL du référentiel, si nécessaire, et transférez-les vers la branche requise.
Comme dans ce commentaire post , que dit votre /Web/git/Logs/ErrorLog
à propos de cette erreur?
Après avoir regardé dans
/Web/git/Logs/ErrorLog
, j’ai découvert qu’il y avait un problème d’autorisation sur le fichier de verrouillage . Dans monhttpd-dav.conf
, j'ai la ligne…
DavLockDB “/usr/var/DavLock”
J'ai ensuite vérifié le répertoire
/usr/
, le répertoire ‘var
’ était manquant.
$ mkdir var
$ cd var
$ chown www .
$ chgrp www .
Et puis répéter le processus semble que maintenant je peux pousser !! =)
Comme mentionné par Eddie dans les commentaires et par Arrowmaster dans son _ (voté) answer , le protocole smart http fait maintenant partie de la récente distribution Git.
Le script CGI git-http-backend
peut s’occuper de toutes les commandes git via http.
Les protocoles les plus intelligents (git et ssh) auraient plutôt une conversation avec le processus git upload-pack sur le serveur, qui déterminerait le jeu exact d’objets dont le client a besoin et construirait un fichier de compression personnalisé contenant uniquement ces objets et le diffuser.
Git 2.17 (T2 2018) ajoutera une aide au débogage.
Voir commit a2b9820 (24 janvier 2018) de Patryk Obara (dreamer
) .
(Fusion de Junio C Hamano - gitster
- dans commit 39a1dd8 , 13 février 2018)
http-Push
: améliore le journal des erreursLorsque
git Push
échoue à cause d'une erreur WebDAV côté serveur, il n'est pas facile de pointez sur le principal coupable.
Des informations supplémentaires sur l'erreur exactecURL
et la réponse du serveur HTTP sont utiles pour le débogage.
J'ai le même problème et j'ai trouvé les solutions, ce sera peut-être utile pour quelqu'un.
Ici est ma solution avec la configuration git-http-backend et l’authentification LDAP.
vous devrez peut-être ajouter l'utilisateur en tant que membre du référentiel et éventuellement mettre à jour les autorisations.
nous devions le faire avec chaque membre qui contribuerait au référentiel github de notre organisation.
J'ai eu le même problème sous Windows, où mes informations d'identification sont stockées dans le gestionnaire d'informations d'identification Windows. Je ne voulais pas que chaque utilisateur doive éditer le fichier de configuration, j'ai donc changé l'URL de http://example.com en http: //[email protected] et cela fonctionne même si mon id n'est pas git. Je ne pense pas qu'un utilisateur "git" soit défini nulle part et suppose qu'un nom quelconque fonctionnera. (Si vous n'êtes pas sur un réseau privé, assurez-vous d'utiliser https).
J'ai eu un problème similaire dans lequel je pouvais cloner et extraire du référentiel à l'aide du protocole HTTP, mais je n'étais pas capable de Push. J'ai résolu ceci en procédant comme suit.
J'ai modifié l'URL de la télécommande dans le fichier .git/config du projet afin qu'il corresponde à l'URL GitHub SSH. J'ai ensuite suivi toutes les instructions sur " https://help.github.com/articles/generating-ssh-keys#platform-linux " et j'ai résolu le problème avec " https://help.github.com/articles/error-permission-denied-publickey ". La meilleure partie est que je n'ai pas eu à traiter avec Apache ou modifier les paramètres HTTP sur le serveur distant.
En exemple d’écriture authentifiée git dav virtualhost avec gitweb enable qui pourrait résoudre votre problème:
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName git.example.com
DocumentRoot /var/git
# SSL configuration
SSLEngine on
# Fix dav header
#RequestHeader edit Destination ^https: http: early
<Directory /var/git>
DAV on
Options ExecCgi FollowSymLinks
# Gitweb config
AddHandler cgi-script .cgi
DirectoryIndex .gitweb.cgi
SetEnv GITWEB_CONFIG /var/git/.gitweb.conf
# Basic auth config
AuthType Basic
# Auth title
AuthName "Git repositories"
# Use file and external providers
AuthBasicProvider file
# File location
AuthUserFile /var/git/.htpasswd
Require method GET OPTIONS PROPFIND
<LimitExcept GET OPTIONS PROPFIND>
Require valid-user
</LimitExcept>
</Directory>
</VirtualHost>
Ensuite, il suffit de cloner votre référentiel avec votre utilisateur:
git clone https://[email protected]/repository
Et quand vous essayerez de pousser, il demandera votre mot de passe et le fournira.
Placer le mot de passe dans l'URL de clonage est une mauvaise pratique de sécurité car tout le monde peut le lire dans votre fichier .git/config.