git push fatal fallito


24

In qualche modo ho eliminato l'intera directory del mio ramo di codice. Ne ho clonato uno nuovo. Funzionava benissimo tranne che spingendo.

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

git pull funziona, però. Come posso ripararlo?

git  push 

1
Per favore, leggi questo manuale qui e nota il punto http.receivepack.
hhh

Risposte:


33

Ho fatto l'errore di usare https invece di ssh per una nuova copia. Da allora ho apportato modifiche e si impegna, ma non ho potuto spingere per ovvie ragioni.

Per recuperare, ho semplicemente cambiato la sezione [remote "origin"] in .git / config da

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

a

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

Dopo ciò, potrei spingere di nuovo.


2
Non c'è bisogno di passare a un altro protocollo, leggi la mia risposta qui sotto se desideri inviare http.
Basilio

1
Concordo con Basil, ciò è superfluo e impossibile in alcuni ambienti aziendali che hanno accesso limitato tramite firewall, ecc.

... il problema è che git-http-push failed, vedo che l'operazione sta cercando di impostare le cose su http o https, -1.
hhh

14

Push HTTP più veloce con solo git - webDAV non è richiesto

Il nuovo supporto "smart-http" da git 1.6.6. Il nuovo metodo consente di trasmettere contemporaneamente l'intero pacchetto e non come singoli file.

Puoi anche usare gitweb per fornire URL comprensibili nella stessa posizione.

Nota: poiché l'accesso è controllato da apache, è possibile aggiungere qualsiasi requisito Auth (htaccess o ldap, ecc.) All'installazione per ciascun repository.

Questa risposta presuppone che tu sia il proprietario del server remoto e desideri aggiungere / correggere il supporto http.

PRIMO: controlla i log di apache, è probabile che un'autorizzazione sia stata negata / impossibile individuare un errore quando apache tenta di eseguire gli script cgi supportati da git-http.

Aggiunta del supporto HTTP a git

Basta creare un nuovo file git_support.conf e includerlo in apache (aggiungere l'istruzione include in 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/

Il risultato è la capacità di spingere / tirare:

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

E puoi sfogliare quelle modifiche online .. gitweb fornisce un'interfaccia navigabile

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


Quando eseguo la riga IMPORTANTE sull'utente, riga 7, ottengo "SetEnv takes 1-2 arguments, an environment variable name and optional value to pass to CGI.": perché?
hhh

Immagino che quel valore sia vuoto, quindi setenv vede solo 0 argomenti. Poiché l'apache utilizza una regola di reindirizzamento, è possibile che REMOTE_USER sia vuoto, quindi prendiamo REDIRECT_RMEOTE_USER. Dovresti essere in grado di rendere facoltativo il compito se RMEOTE_USER è già definito (o meglio se l'utente REDIRECT è vuoto). httpd.apache.org/docs/2.0/mod/mod_setenvif.html#setenvif

7

Per abilitare un " push git " su http, devi abilitare WebDAV sul server web. Per farlo per Apache Webserver, modifica semplicemente il file di configurazione:

vim /etc/httpd/conf/httpd.conf

Quindi cerca la riga che inizia con:

<Directory "/var/www/html">

Aggiungi la seguente riga subito dopo:

Dav On

Assicurati di avere la seguente riga anche in httpd.conf senza commenti:

LoadModule dav_fs_module modules/mod_dav_fs.so

Dopo di che sei pronto. Riavvia il server web Apache usando:

service httpd restart

Assicurati anche che tutti i file del repository git sul server siano scrivibili dall'utente pache: apache e dal gruppo usando:

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

Altrimenti, se non si impostano le autorizzazioni corrette, si verificherà "Errore PUT: risultato arricciatura = 22, codice HTTP = 403" quando si esegue un "git push".

Ora fai semplicemente un "git push" dal tuo computer client e tutto dovrebbe funzionare.


Nota, se gli utenti a superare questo ostacolo, ma vedere un errore nei registri apcahe su ricevere-pack stackoverflow.com/questions/792611/...

2
Funzionerà, ma DAV non è richiesto e in realtà funziona molto più lentamente di smart-http.

4

Non è possibile inviare un repository clonato tramite HTTP. Devi aggiornare l'URL a uno ssh://o un git://tipo di URL.


Ho usato lo stesso comando clone. Ha funzionato prima fino a quando ho fatto la cancellazione sbagliata ....

con cosa hai git remote -v?
The Mighty Rubber Duck,

Non del tutto vero. Puoi tornare ai repository, supponendo che DAV sia abilitato.

6
Questo non è corretto Git dalla 1.6.6 supporta push e pull intelligenti di http usando apache e git-http-backend.

3

Modifica la seguente sezione del tuo file .git / config:

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://git.repository.url/repo.git

a

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://username:password@git.repository.url/repo.git

Quindi prova git push origin master.

Modifica i dettagli di autenticazione nei tuoi file di configurazione per altri URL del repository come richiesto e spingi nel ramo richiesto.


Nota: ho usato questo metodo e ho risolto il mio problema, tuttavia ho pensato che l'archiviazione della password nel file di configurazione sembrava sbagliata, quindi l'ho lasciata fuori (sperando di essere richiesta) e sono stata in grado di usarla come tale.
chris,

git remote set-url origin ...funziona anche.
Maximilian Hils,

1

Ho avuto lo stesso problema con l'operazione push con git-http-backend, configurazione di autenticazione LDAP.
Finalmente ho trovato la soluzione e la descrivo in questa domanda serverfault

Forse aiuterà qualcuno con un problema simile.


0

grande

ho avuto altri errori ma funziona!

provo a spiegare:

  • installa un server ubuntu con apache2 e webdav
  • Guarda http://www.mabishu.com/blog/2011/02/09/setup-a-remote-git-repository-using-http-with-push-support-and-digest-auth/ per i dettagli
  • clone sul client -> Perfetto!
  • cambia qualcosa....
  • push -> fallito
  • cambia proprietario sul server
  • Errore "Errore PUT: risultato arricciatura = 22, codice HTTP = 403" è andato ..
  • ora dice solo che git-http-push non è riuscito
  • serverlog: Could not LOCK /path/to/www/gitproject/refs/heads/master due to a failed precondition (e.g. other locks)
  • ho usato la risposta di user1520409ist works.

MA come nascondere la password dal testo nel messaggio push?


-1

Questo può accadere anche se hai inserito una password errata.


Non l'ho mai visto: ottengo sempre il fatal: Authentication failedprimo
Rup,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.