git push fatal a échoué


24

J'ai en quelque sorte supprimé le répertoire entier de ma branche de code. J'en ai cloné un nouveau. Cela a bien fonctionné, sauf en poussant.

~/workspace/wtf (mybranch)]$ git push origin  mybranch 
error: Cannot access URL [my url], return code 22
fatal: git-http-push failed 

git pull fonctionne, cependant. Comment puis-je le réparer?

git  push 

1
Veuillez lire ce manuel ici et notez le point http.receivepack.
hhh

Réponses:


33

J'ai fait l'erreur d'utiliser https au lieu de ssh pour une nouvelle copie. Depuis lors, j'ai apporté des modifications et des commits, mais je n'ai pas pu pousser pour des raisons évidentes.

Pour récupérer, j'ai simplement changé la section [remote "origin"] dans .git / config de

url = https://github.com/AIFDR/riab_core.git

à

url = git@github.com: AIFDR / riab_core.git

Après cela, je pouvais encore pousser.


2
Pas besoin de passer à un autre protocole, lisez ma réponse ci-dessous si vous souhaitez pousser sur http.
Basil A

1
D'accord avec Basil, c'est inutile et impossible dans certains environnements d'entreprise qui ont un accès limité à travers des pare-feu, etc.

... le problème est avec git-http-push failed, je vois que l'op essaie de configurer les choses sur http ou https, -1.
hhh

14

Push HTTP plus rapide avec seulement git - webDAV n'est pas requis

Le nouveau support "smart-http" depuis git 1.6.6. La nouvelle méthode permet à l'ensemble du pack d'être transmis en une seule fois, et non en tant que fichiers individuels.

Vous pouvez également utiliser gitweb pour fournir des URL navigables au même endroit.

Remarque: L'accès étant contrôlé par Apache, vous pouvez ajouter toutes les exigences Auth (htaccess ou ldap, etc.) à la configuration de chaque référentiel.

Cette réponse suppose que vous possédez le serveur distant et que vous souhaitez ajouter / corriger la prise en charge http.

D'ABORD: Vérifiez les journaux d'Apache, il s'agit probablement d'une autorisation refusée / incapable de localiser l'erreur lorsque Apache essaie d'exécuter les scripts cgi soutenus par git-http.

Ajout de la prise en charge HTTP à git

Créez simplement un nouveau fichier git_support.conf et incluez-le dans apache (ajoutez l'instruction include dans httpd.conf)

#
#  Basic setup for git-http-backend
#

SetEnv GIT_PROJECT_ROOT /opt/git_repos
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER  #IMportant !!! This could be your problem if missing

<Directory /opt/git>  # both http_backend and gitweb should be somewhere under here
        AllowOverride None
        Options +ExecCGI -Includes  #Important! Lets apache execute the script!
        Order allow,deny
        Allow from all
</Directory>

# This pattern matches git operations and passes them to http-backend
ScriptAliasMatch \
        "(?x)^/git/(.*/(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))$" \
        /opt/git/libexec/git-core/git-http-backend/$1

# Anything not matched above goes to displayable gitweb interface
ScriptAlias /git /opt/git/cgi-bin/gitweb.cgi/

Le résultat est la capacité de pousser / tirer:

me@machine /tmp/eddies $ git pull
Already up-to-date.

me@machine /tmp/eddies $ touch changedFile

me@machine /tmp/eddies $ git add .

me@machine /tmp/eddies $ git commit -am"commiting change"
[master ca7f6ed] commiting change
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 changedFile

me@machine /tmp/eddies $ git push origin master
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 239 bytes, done.
Total 2 (delta 1), reused 0 (delta 0)
To http://mysecretdomain.com/git/eddies
   0f626a9..ca7f6ed  master -> master

Et vous pouvez parcourir ces modifications en ligne .. gitweb fournit une interface navigable

Source: http://repo.or.cz/w/alt-git.git?a=blob_plain;f=gitweb/README


Lorsque j'exécute la ligne IMPORTANT concernant l'utilisateur, la ligne 7, j'obtiens "SetEnv takes 1-2 arguments, an environment variable name and optional value to pass to CGI."- pourquoi?
hhh

Je suppose que la valeur est vide, donc setenv ne voit que 0 arguments. Parce que l'apache utilise une règle de redirection, il est possible que REMOTE_USER soit vide, nous prenons donc le REDIRECT_RMEOTE_USER. Vous devriez pouvoir rendre l'affectation facultative si RMEOTE_USER est déjà défini (ou plutôt si l'utilisateur REDIRECT est vide). httpd.apache.org/docs/2.0/mod/mod_setenvif.html#setenvif

7

Pour activer un " git push " sur http, vous devez activer WebDAV sur le serveur Web. Pour cela pour Apache Webserver, modifiez simplement le fichier de configuration:

vim /etc/httpd/conf/httpd.conf

Recherchez ensuite la ligne commençant par:

<Directory "/var/www/html">

Ajoutez la ligne suivante juste après:

Dav On

Assurez-vous que la ligne suivante est également non commentée dans httpd.conf:

LoadModule dav_fs_module modules/mod_dav_fs.so

Après cela, vous êtes prêt. Redémarrez le serveur Web Apache à l'aide de:

service httpd restart

Assurez-vous également que tous les fichiers du référentiel git sur le serveur sont accessibles en écriture par l'utilisateur et le groupe pache: apache en utilisant:

chown -R apache:apache /var/www/html/your_git_repository

Sinon, le fait de ne pas définir les autorisations appropriées entraînera une "erreur PUT: résultat curl = 22, code HTTP = 403" lors de l'exécution d'une "poussée git".

Maintenant, faites simplement un "git push" depuis votre machine cliente et tout devrait fonctionner.


Remarque, si les utilisateurs dépassent cet obstacle, mais voient une erreur dans les journaux d'apcahe concernant le paquet de réception stackoverflow.com/questions/792611/…

2
Cela fonctionnera, mais DAV n'est pas requis et fonctionne en réalité beaucoup plus lentement que smart-http.

4

Vous ne pouvez pas pousser sur un référentiel que vous avez cloné via HTTP. Vous devez mettre à jour l'URL en une ssh://ou une git://URL de type.


J'ai utilisé la même commande clone. Cela a fonctionné avant jusqu'à ce que je fasse la mauvaise suppression ....

avec quoi avez-vous git remote -v?
The Mighty Rubber Duck

Pas tout à fait vrai. Vous pouvez repousser vers les référentiels, en supposant que DAV est activé.

6
Ceci est une erreur. Git depuis 1.6.6 prend en charge les push et pulls http intelligents en utilisant apache et git-http-backend.

3

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:password@git.repository.url/repo.git

Alors essayez git push origin master.

Modifiez les détails d'authentification dans vos fichiers de configuration pour d'autres URL de référentiel selon vos besoins et passez à la branche requise.


Remarque: J'ai utilisé cette méthode et cela a résolu mon problème - mais je pensais que le stockage du mot de passe dans le fichier de configuration semblait incorrect, alors je l'ai laissé de côté (en espérant être invité à le faire), et j'ai pu l'utiliser comme tel.
chris

git remote set-url origin ...fonctionne aussi bien.
Maximilian Hils

1

J'ai eu le même problème avec l'opération push avec git-http-backend, configuration d'authentification LDAP.
Enfin, j'ai trouvé la solution et la décrire dans cette question de défaut de serveur

Peut-être que cela aidera quelqu'un avec un problème similaire.


0

Génial

j'ai eu d'autres erreurs mais ça marche!

j'essaie d'expliquer:

  • installer un serveur ubuntu avec apache2 et webdav
  • Regardez http://www.mabishu.com/blog/2011/02/09/setup-a-remote-git-repository-using-http-with-push-support-and-digest-auth/ pour plus de détails
  • cloner sur le client -> Parfait!
  • change quelque chose....
  • push -> a échoué
  • changer de propriétaire sur le serveur
  • L'erreur "PUT error: curl result = 22, HTTP code = 403" a disparu.
  • maintenant seulement dit que git-http-push a échoué
  • journal du serveur: Could not LOCK /path/to/www/gitproject/refs/heads/master due to a failed precondition (e.g. other locks)
  • j'ai utilisé la réponse de ses user1520409travaux.

MAIS comment cacher le mot de passe du texte au message push?


-1

Cela peut également se produire si vous avez entré un mauvais mot de passe.


Je n'ai jamais vu ça: j'ai toujours le fatal: Authentication failedpremier
Rup
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.