web-dev-qa-db-fra.com

git Push fatal a échoué

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

~/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?

24
user398384

J'ai commis l'erreur d'utiliser https au lieu de ssh pour une nouvelle copie. Depuis lors, j'ai apporté des modifications et des modifications, mais je ne pouvais pas 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 = [email protected]: AIFDR/riab_core.git

Après cela, je pourrais pousser à nouveau.

33
Ole

HTTP Push 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 de transmettre l’ensemble du pack en une seule fois, et non sous forme de fichiers individuels.

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

Remarque: étant donné que l'accès est contrôlé par Apache, vous pouvez ajouter toutes les exigences relatives aux autorisations (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/réparer le support http.

FIRST: Vérifiez les journaux Apache, il est probable qu'une erreur soit refusée/impossible de localiser une autorisation lorsque Apache tente d'exécuter les scripts cgi basés sur git-http.

Ajout du support HTTP à git

Créez simplement un nouveau fichier git_support.conf et incluez-le dans Apache (ajoutez la commande 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 provides a browsable interface

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

14
Eddie

Pour activer un " git Push " sur http, vous devez activer WebDAV sur le serveur Web. Pour faire cela sur Apache Webserver, éditez 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 de ne pas commenter la ligne suivante 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 en utilisant:

service httpd restart

Assurez-vous également que tous les fichiers du référentiel git sur le serveur soient accessibles en écriture à l'utilisateur pache: Apache et à son groupe à l'aide de:

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

Sinon, si vous ne définissez pas les autorisations appropriées, le résultat sera "Erreur PUT: résultat curl = 22, code HTTP = 403" lors de l'exécution d'un "git Push".

Maintenant, faites simplement un "git Push" à partir de votre ordinateur client et tout devrait fonctionner.

7
Basil A

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

4

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 d'autres URL de référentiel, si nécessaire, et transférez-les vers la branche requise.

3
Deepak

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

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

1
gaspar

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 -> échoué
  • changer de propriétaire sur le serveur
  • Erreur "Erreur PUT: résultat curl = 22, code HTTP = 403" est parti ..
  • maintenant seulement dit que git-http-Push a échoué
  • serverlog: 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 user1520409 ist works.

MAIS comment masquer le mot de passe du texte du message Push?

0
user201304010101