git push tödlich gescheitert

41832

Ich habe irgendwie das gesamte Verzeichnis meines Code-Zweiges gelöscht. Ich habe einen neuen geklont. Es hat gut funktioniert, außer drängen.

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

Git Pull funktioniert aber. Wie kann ich es reparieren?

24
Bitte lesen Sie dieses Handbuch [hier] (http://www.parallelsymmetry.com/howto/git.jsp) und beachten Sie den Punkt zu `http.receivepack`. hhh vor 11 Jahren 1

8 Antworten auf die Frage

33

Ich habe den Fehler gemacht, https anstelle von ssh für eine neue Kopie zu verwenden. Ich habe seitdem Modifikationen und Zusagen gemacht, konnte sie aber aus offensichtlichen Gründen nicht verschieben.

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

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

zu

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

Danach konnte ich wieder drücken.

Es ist nicht notwendig, zu einem anderen Protokoll zu wechseln. Lesen Sie meine Antwort unten, wenn Sie http verschieben möchten. Basil A vor 12 Jahren 2
Stimmen Sie mit Basil überein, dies ist unnötig und in einigen Unternehmensumgebungen mit eingeschränktem Zugriff durch Firewalls usw. nicht möglich. vor 12 Jahren 1
... das Problem ist mit `git-http-push failed`, ich sehe, dass der Op versucht, die Dinge entweder über http oder https einzurichten, -1. hhh vor 11 Jahren 0
14
Eddie

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

Die neue "smart-http" Unterstützung seit git 1.6.6. Die neue Methode ermöglicht die Übertragung des gesamten Pakets auf einmal und nicht als einzelne Dateien.

Sie können gitweb auch verwenden, um browable URLs am selben Ort bereitzustellen.

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

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

FIRST: Überprüfen Sie die Apache-Protokolle. Wahrscheinlich wurde eine Berechtigung verweigert bzw. kann kein Fehler gefunden werden, wenn Apache versucht, die git-http-gestützten CGI-Skripts auszuführen.

Hinzufügen von HTTP-Unterstützung zu git

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

# # 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]/[0-9a-f] | \ pack/pack-[0-9a-f]\.(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 provides a browsable interface

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

Wenn ich die Zeile WICHTIG über den Benutzer, Zeile 7, laufe, erhalte ich `" SetEnv benötigt 1-2 Argumente, einen Umgebungsvariablennamen und einen optionalen Wert, der an CGI übergeben werden soll. "` - warum? hhh vor 11 Jahren 0
Ich denke, dass der Wert leer ist, so dass setenv nur 0 Argumente sieht. Da der Apache eine Umleitungsregel verwendet, ist es möglich, dass REMOTE_USER leer ist. Daher greifen wir zum REDIRECT_RMEOTE_USER. Sie sollten die Zuweisung optional machen können, wenn RMEOTE_USER bereits definiert ist (oder der Benutzer REDIRECT leer ist). http://httpd.apache.org/docs/2.0/mod/mod_setenvif.html#setenvif vor 11 Jahren 0
7
Basil A

Um ein " git push " über http zu aktivieren, müssen Sie WebDAV auf dem Webserver aktivieren. Um dies für Apache Webserver zu tun, bearbeiten Sie einfach die Konfigurationsdatei:

vim /etc/httpd/conf/httpd.conf 

Suchen Sie dann nach der Zeile mit:

<Directory "/var/www/html"> 

Fügen Sie gleich folgende Zeile ein:

Dav On 

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

LoadModule dav_fs_module modules/mod_dav_fs.so 

Danach bist du bereit. Starten Sie den Apache Webserver erneut mit:

service httpd restart 

Stellen Sie außerdem sicher, dass alle git-Repository-Dateien auf dem Server vom pache: apache-Benutzer und der folgenden Gruppe beschrieben werden können:

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

Andernfalls führt das Versetzen beim Festlegen der korrekten Berechtigungen zu einem "PUT-Fehler: curl-Ergebnis = 22, HTTP-Code = 403", wenn ein "git push" ausgeführt wird.

Jetzt machen Sie einfach einen "git push" von Ihrem Client-Rechner aus und alles sollte funktionieren.

Beachten Sie, wenn Benutzer an dieser Hürde vorbeikommen, aber in den apcahe-Protokollen über das Empfangs-Pack http://stackoverflow.com/questions/792611/receive-pack-service-not-enabled-for-git/7150380#7150380 ein Fehler angezeigt wird vor 12 Jahren 0
Dies wird funktionieren, aber DAV ist * nicht * erforderlich und arbeitet tatsächlich viel langsamer als Smart-http. vor 12 Jahren 2
4
The Mighty Rubber Duck

Sie können kein Repository verwenden, das Sie über HTTP geklont haben. Sie müssen die URL entweder auf eine ssh://oder eine git://Typ-URL aktualisieren .

Ich habe den gleichen Klonbefehl verwendet. Es hat vorher funktioniert, bis ich die falsche Löschung vorgenommen habe .... vor 13 Jahren 0
was hast du mit git remote -v? The Mighty Rubber Duck vor 13 Jahren 0
Nicht ganz richtig. Sie können zu Repositorys zurückkehren, vorausgesetzt, DAV ist aktiviert. vor 13 Jahren 0
Das ist falsch. Git unterstützt seit 1.6.6 smarte http Pushs und Pulls mit Apache und git-http-backend. vor 12 Jahren 6
3
Deepak

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 nach Bedarf für andere Repository-URLs, und wechseln Sie zum gewünschten Zweig.

Hinweis: Ich habe diese Methode verwendet und mein Problem gelöst. Allerdings dachte ich, das Speichern des Passworts in der Konfigurationsdatei schien falsch zu sein. Daher habe ich es deaktiviert (hoffend, dass Sie dazu aufgefordert werden) und es als solches verwenden konnte. chris vor 10 Jahren 0
`git remote set-url origin ...` funktioniert ebenfalls. Maximilian Hils vor 10 Jahren 0
1
gaspar

Ich hatte das gleiche Problem mit der Push-Operation mit git-http-backend und ldap authentication config.
Schließlich habe ich die Lösung gefunden und in dieser Serverfault-Frage beschrieben

Vielleicht hilft es jemandem mit ähnlichen Problemen.

0
user201304010101

Great

i had other errors but it works!

i try to explain:

BUT how to hide the password from the text at the push message?

-1
sacha

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

Ich habe das noch nie gesehen: Ich bekomme immer zuerst "fatal: Authentication failed" Rup vor 12 Jahren 0