744 Stimmen

Git und böser "Fehler: kann vorhandene Info/Refs nicht sperren fatal"

Nach dem Klonen von einem entfernten Git-Repository (bei bettercodes) habe ich einige Änderungen vorgenommen, commited und versucht zu pushen:

git push origin master

Irrtümer mit:

Fehler: kann vorhandene Infos/Referenzen nicht sperren
fatal: git-http-push fehlgeschlagen

Dieser Fall betrifft ein bereits bestehendes Repository.

Was ich vorher gemacht habe, war:

  1. git config –global http.sslVerify false
  2. git init
  3. git remote add [url]
  4. git clone
  5. Daten ändern
  6. git commit

Bei "bettercodes" habe ich keinen Zugriff auf das Git-Protokoll.

Ich verwende Windows. Die detaillierte Fehlermeldung lautete:

C:\MyWorkStuff\Projects\Ruby\MyProject\>git push origin master
Unable to create branch path https://user:password@git.bettercodes.org/myproject/info/
error: cannot lock existing info/refs
fatal: git-http-push failed

Ich habe vorher geklont, dann den Code geändert und übertragen.

15voto

WolfTail Punkte 149

Wahrscheinlich ist das Problem inzwischen gelöst. Aber hier ist, was bei mir funktioniert hat.

  1. Standort:

    • Wenn sich das gesperrte Repository auf der Serverseite befindet:

      1. ssh zu Ihrem Git-Repository auf dem Server.
      2. Melden Sie sich als Benutzer an, der die Berechtigung hat, das Repository zu ändern, und navigieren Sie zum Repository auf Ihrem Server.
    • Wenn das gesperrte Repository nur lokal ist:

      1. Öffnen Sie die Git-Konsole und navigieren Sie zum Verzeichnis des Repositorys.
      2. Führen Sie diesen Befehl aus:

        git update-server-info
  2. Korrigieren Sie die Berechtigungen für Ihr (entferntes oder/und lokales) Repository, wenn Sie das müssen. In meinem Fall musste ich chmod a 777 y chown a apache:apache

  3. Versuchen Sie erneut, vom lokalen Repository aus zu pushen:

    git push

8voto

Josh Punkte 5705

Das klingt nach einem Berechtigungsproblem - ist es möglich, dass Sie zwei Fenster geöffnet hatten, die mit unterschiedlichen Rechten ausgeführt wurden? Überprüfen Sie vielleicht die Eigentümerschaft des .git-Ordners.

Überprüfen Sie vielleicht, ob eine offene Dateisperre vorhanden ist. Verwenden Sie dazu lsof oder das entsprechende Programm für Ihr Betriebssystem.

8voto

schmunk Punkte 4648

Bei mir funktioniert es folgendermaßen.

  1. die Apache-DAV-Sperrdatei auf Ihrem Server nachschlagen (z. B. /var/lock/apache2/DAVlock)
  2. löschen
  3. mit Schreibberechtigung für den Webserver neu erstellen
  4. den Webserver neu starten

Noch schnellere Alternative:

  1. die Apache-DAV-Sperrdatei auf Ihrem Server nachschlagen (z. B. /var/lock/apache2/DAVlock)
  2. Leeren Sie die Datei: cat /dev/null > /var/lock/apache2/DAVlock
  3. den Webserver neu starten

5voto

CodingYourLife Punkte 5512

In meinem Fall wurde ein Zweig in ein Unterverzeichnis verschoben, und das Verzeichnis wurde als Zweig bezeichnet. Git war dadurch verwirrt. Als ich den lokalen Zweig löschte (in SourceTree einfach mit Rechtsklick löschen) funktionierte alles wie gewohnt.

4voto

Denis Punkte 145

Ich hatte ein typisches Mac-bezogenes Problem, das ich mit den anderen vorgeschlagenen Antworten nicht lösen konnte.

Das Dateisystem des Mac ist standardmäßig so eingestellt, dass die Groß- und Kleinschreibung nicht beachtet wird.

In meinem Fall hat ein Kollege offensichtlich vergessen, einen Großbuchstaben für eine Zweigstelle zu erstellen, z. B.

testBranchen/ID-1 vs. testBranch/ID-2

für das Mac-Dateisystem (ja, es kann anders konfiguriert werden) sind diese beiden Verzweigungen gleich und in diesem Fall erhalten Sie nur einen der beiden Ordner. Und für den verbleibenden Ordner erhalten Sie einen Fehler.

In meinem Fall hat das Entfernen des betreffenden Unterordners in .git/logs/ref/remotes/origin das Problem gelöst, da der betreffende Zweig bereits wieder zusammengeführt wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X