Git Push Fatal fehlgeschlagen


24

Ich habe irgendwie das gesamte Verzeichnis meines Code-Zweigs gelöscht. Ich habe einen neuen geklont. Es funktionierte gut, außer zu schieben.

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

Git Pull funktioniert jedoch. Wie kann ich es reparieren?

git  push 

1
Bitte lesen Sie dieses Handbuch hier und beachten Sie den Punkt über http.receivepack.
hhh

Antworten:


33

Ich habe den Fehler gemacht, https anstelle von ssh für eine neue Kopie zu verwenden. Ich habe seitdem Änderungen und Commits vorgenommen, konnte aber aus offensichtlichen Gründen keine Pushs durchführen.

Zur Wiederherstellung habe ich einfach den Abschnitt [remote "origin"] in .git / config von geändert

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

zu

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

Danach konnte ich wieder pushen.


2
Sie müssen nicht zu einem anderen Protokoll wechseln. Lesen Sie meine Antwort weiter unten, wenn Sie http übermitteln möchten.
Basil A

1
Stimmen Sie Basil zu, dies ist unnötig und in einigen Unternehmensumgebungen, in denen der Zugriff durch Firewalls usw. eingeschränkt ist, unmöglich.

... das Problem ist git-http-push failed, ich sehe, dass der op versucht, Dinge entweder über http oder https, -1 einzurichten.
hhh

14

Schnellerer HTTP-Push mit nur git - webDAV ist nicht erforderlich

Die neue "smart-http" -Unterstützung seit git 1.6.6. Mit der neuen Methode kann das gesamte Paket auf einmal und nicht als einzelne Dateien übertragen werden.

Sie können gitweb auch verwenden, um an derselben Stelle URLs zum Aufrufen bereitzustellen.

Hinweis: Da der Zugriff von Apache gesteuert wird, können Sie dem Setup für jedes Repository beliebige Authentifizierungsanforderungen (htaccess oder ldap usw.) hinzufügen.

Diese Antwort setzt voraus, dass Sie den Remote-Server besitzen und die http-Unterstützung hinzufügen / korrigieren möchten.

ZUERST: Überprüfen Sie die Apache-Protokolle. Es ist wahrscheinlich, dass eine Berechtigung verweigert wurde / kein Fehler gefunden werden konnte, wenn Apache versucht, die git-http-gesicherten CGI-Skripte auszuführen.

Hinzufügen von HTTP-Unterstützung zu Git

Erstellen Sie einfach eine neue git_support.conf-Datei und fügen Sie sie in Apache ein (fügen Sie die include-Anweisung in httpd.conf hinzu).

#
#  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/

Das Ergebnis ist die Fähigkeit zum Drücken / Ziehen:

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

Und Sie können diese Änderungen online durchsuchen. gitweb bietet eine durchsuchbare Oberfläche

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


Wenn ich die WICHTIGE Zeile für den Benutzer, Zeile 7, ausführe, erhalte ich "SetEnv takes 1-2 arguments, an environment variable name and optional value to pass to CGI."- warum?
hhh

Ich würde vermuten, dass der Wert leer ist, so dass setenv nur 0 Argumente sieht. Da der Apache eine Umleitungsregel verwendet, ist REMOTE_USER möglicherweise leer, sodass wir REDIRECT_RMEOTE_USER abrufen. Sie sollten in der Lage sein, die Zuweisung optional zu machen, wenn RMEOTE_USER bereits definiert ist (oder wenn der REDIRECT-Benutzer leer ist). httpd.apache.org/docs/2.0/mod/mod_setenvif.html#setenvif

7

Um einen " Git-Push " über http zu aktivieren, müssen Sie WebDAV auf dem Webserver aktivieren. Bearbeiten Sie dazu für Apache Webserver einfach die Konfigurationsdatei:

vim /etc/httpd/conf/httpd.conf

Dann suchen Sie die Zeile beginnend mit:

<Directory "/var/www/html">

Fügen Sie unmittelbar danach die folgende Zeile hinzu:

Dav On

Stellen Sie sicher, dass Sie die folgende Zeile auch in der httpd.conf unkommentiert haben:

LoadModule dav_fs_module modules/mod_dav_fs.so

Danach sind Sie bereit. Starten Sie den Apache Webserver neu mit:

service httpd restart

Stellen Sie außerdem sicher, dass alle Git-Repository-Dateien auf dem Server vom pache: apache-Benutzer und der Gruppe beschreibbar sind. Verwenden Sie dazu:

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

Andernfalls führt das Nichteinstellen der richtigen Berechtigungen zu "PUT-Fehler: Ergebnis der Aufrollung = 22, HTTP-Code = 403", wenn ein "Git-Push" ausgeführt wird.

Führen Sie jetzt einfach einen "Git-Push" von Ihrem Client-Computer aus, und alles sollte funktionieren.


Hinweis: Wenn Benutzer diese Hürde überwinden, wird in den Apcahe-Protokollen ein Fehler zu Receive-Pack Stackoverflow.com/questions/792611/…

2
Dies wird funktionieren, aber DAV wird nicht benötigt und ist wesentlich langsamer als smart-http.

4

Sie können ein über HTTP geklontes Repository nicht pushen. Sie müssen die URL entweder auf eine URL ssh://oder auf eine git://Typ-URL aktualisieren .


Ich habe den gleichen Klonbefehl verwendet. Es hat vorher funktioniert, bis ich die falsche Löschung vorgenommen habe ....

was Sie haben mit git remote -v?
Die mächtige Gummiente

Nicht ganz richtig. Sie können zu Repositorys zurückkehren, vorausgesetzt, DAV ist aktiviert.

6
Das ist falsch. Git unterstützt seit 1.6.6 Smart-http-Pushs und -Pulls mit Apache und Git-http-Backend.

3

Bearbeiten Sie den folgenden Abschnitt Ihrer .git / config-Datei:

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

zu

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

Dann versuche es git push origin master.

Bearbeiten Sie die Authentifizierungsdetails in Ihren Konfigurationsdateien für andere Repository-URLs nach Bedarf und senden Sie sie an den gewünschten Zweig.


Hinweis: Ich habe diese Methode verwendet und mein Problem behoben. Ich dachte jedoch, dass das Speichern des Kennworts in der Konfigurationsdatei falsch ist. Daher habe ich es deaktiviert (in der Hoffnung, dazu aufgefordert zu werden) und konnte es als solches verwenden.
Chris

git remote set-url origin ...funktioniert auch.
Maximilian Hils


0

Groß

Ich hatte andere Fehler, aber es funktioniert!

ich versuche zu erklären:

  • Installieren Sie einen Ubuntu-Server mit Apache2 und WebDAV
  • Weitere Informationen finden Sie unter http://www.mabishu.com/blog/2011/02/09/setup-a-remote-git-repository-using-http-with-push-support-and-digest-auth/
  • auf client klonen -> Perfekt!
  • ändere etwas....
  • push -> fehlgeschlagen
  • Besitzer auf dem Server ändern
  • Fehler "PUT-Fehler: Curl-Ergebnis = 22, HTTP-Code = 403" ist verschwunden.
  • jetzt sagt nur git-http-push fehlgeschlagen
  • Serverlog: Could not LOCK /path/to/www/gitproject/refs/heads/master due to a failed precondition (e.g. other locks)
  • Ich habe die Antwort von user1520409seinen Arbeiten verwendet.

ABER wie versteckt man das Passwort vor dem Text in der Push-Nachricht?


-1

Dies kann auch passieren, wenn Sie ein falsches Passwort eingegeben haben.


Das habe ich noch nie gesehen: Ich komme immer fatal: Authentication failedzuerst
Rup
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.