Git Pull mit Fehler Dateiname zu lange abgebrochen

114

Ich verwende Windows als Betriebssystem und arbeite mit einem Freund, der einen Mac verwendet, an einem Projekt. Er hat Code in unseren Github eingecheckt.

Ich habe versucht, alles zu ziehen, was er getan hat, und es wurde mit "Dateinamen zu lang" -Fehlern des Codes von Drittanbietern abgebrochen.

Was kann ich tun?

Dave Martin
quelle
Dieses Problem hat je nach Operation zwei grundsätzlich unterschiedliche Fälle. Wenn das Repository bereits vorhanden ist, können Sie seine Konfiguration bearbeiten. Aber wenn nicht? Beim Klonen / Auschecken mit Erstellung eines neuen Verzeichnisses hilft nur die Antwort von @AlexRosenfeld.
Gangnus

Antworten:

200

Die msysgit-FAQ auf Git kann kein Dateiverzeichnis mit einem langen Pfad erstellen, das nicht aktuell zu sein scheint, da es immer noch auf das alte msysgit- Ticket Nr. 110 verweist . Gemäß dem späteren Ticket Nr. 122 wurde das Problem jedoch in msysgit 1.9 behoben, also:

  1. Update auf msysgit 1.9 (oder höher)
  2. Starten Sie Git Bash
  3. Gehen Sie zu Ihrem Git-Repository, das unter Problemen mit langen Pfaden leidet
  4. Aktivieren Sie die Unterstützung für lange Pfade mit git config core.longpaths true

Bisher hat es bei mir sehr gut funktioniert.

Beachten Sie wichtige Hinweise im Kommentar zum Ticket Nr. 122

Kommen Sie nicht hierher zurück und beschweren Sie sich, dass Windows Explorer, cmd.exe, bash oder die von Ihnen verwendeten Tools beschädigt werden.

Mloskot
quelle
Es gibt ein paar Updates, sieht aus wie es einige zusätzliche Skript nach der Installation mysysgit laufen müssen , ist github.com/msysgit/git/pull/122#issuecomment-43653756
Adam Grant
18
Was tatsächlich funktionierte war: git config --global core.longpaths true
Anton Andreev
@AntonAndreev Ja, wenn Sie es in einem globalen Bereich festlegen möchten, ist das in Ordnung. Der lokale Bereich pro Repository ist ebenfalls vollkommen gültig.
Mloskot
Es hat bei mir nicht funktioniert, ohne es auf globaler Ebene zu setzen.
Anton Andreev
1
Auf diese Weise funktioniert das Klonen / Auschecken beim Erstellen eines neuen Verzeichnisses nicht. Nur die Antwort von @AlexRosenfeld hilft.
Gangnus
69

Lösung 1 - Legen Sie die globale Konfiguration fest, indem Sie diesen Befehl ausführen:

git config --system core.longpaths true

Lösung 2 - oder Sie können Ihre spezifische Git-Konfigurationsdatei wie folgt direkt bearbeiten:

YourRepoFolder -> .git -> config:

[core]
    repositoryformatversion = 0
    filemode = false
    ...
    longpaths = true        <-- (add this line under core section)

Lösung 3 - beim Klonen eines neuen Repositorys: hier .

Daniel Hári
quelle
1
Auf diese Weise funktioniert das Klonen / Auschecken beim Erstellen eines neuen Verzeichnisses nicht. Nur die Antwort von @AlexRosenfeld hilft.
Gangnus
Ich habe die Antwort damit aktualisiert, um sie an einem Ort zu haben, danke.
Daniel Hári
26

Ein paar Jahre zu spät, aber ich möchte hinzufügen, dass Sie die Konfigurationseinstellungen während des Klonbefehls festlegen können, wenn Sie dies auf einen Schlag tun müssen (wie ich). Versuche dies:

git clone -c core.longpaths=true <your.url.here>
Xandermonkey
quelle
1
Prost Kumpel! Dies hat beim Klonen eines neuen Verzeichnisses von github hervorragend funktioniert.
Jay Killeen
Kein Problem, froh, dass es geholfen hat!
Xandermonkey
1
Ja! Dieser und zum Klonen - nur dieser funktioniert!
Gangnus
Das funktioniert nicht, mein Klonen wird immer noch abgebrochen. Ich benutze git version 1.8.4.msysgit.0, eine Idee?
Einfache Lösung
Es sieht so aus, als wäre das veraltet . Vielleicht versuchen Sie es mit git-scm? Welchen Fehler bekommen Sie?
Xandermonkey
12

Öffnen Sie die Datei your.gitconfig, um die Eigenschaft longpaths hinzuzufügen. Es wird also wie folgt aussehen:

[core]
symlinks = false
autocrlf = true
longpaths = true
Pete
quelle
1
Auf diese Weise funktioniert das Klonen / Auschecken beim Erstellen eines neuen Verzeichnisses nicht. Nur die Antwort von @AlexRosenfeld hilft.
Gangnus
6

Als jemand, der ständig auf dieses Problem mit Java-Repositorys unter Windows gestoßen ist, besteht die beste Lösung darin, Cygwin ( https://www.cygwin.com/ ) zu installieren und die Git-Installation unter all> devel> git zu verwenden.

Der Grund, warum dies die beste Lösung ist, die mir begegnet ist, ist, dass Cygwin die langen Pfadnamen verwaltet, sodass andere bereitgestellte Befehle davon profitieren. Bsp.: Find, cp und rm. Vertrauen Sie mir, das eigentliche Problem beginnt, wenn Sie Pfadnamen löschen müssen, die in Windows zu lang sind.

Tristan
quelle
4

Versuchen Sie, Ihre Dateien näher am Dateisystemstamm zu halten. Weitere Details: Aus technischen Gründen kann Git für Windows keine Dateien oder Verzeichnisse erstellen, wenn der absolute Pfad länger als 260 Zeichen ist .

Michael Ver
quelle
Es scheint, dass es nur bis 130 gehen kann [vielleicht verwendet
Windows Doppelbyte-
5
Mehr Leute sollten Microsoft dazu drängen, diese Einschränkung zu ändern (und die alten APIs zu reparieren, gegen die sie verstoßen). Es gibt keinen Grund, warum wir noch mit diesem Rest von Tagen leben sollten, als Dateinamen auf <8>. <3> Zeichen beschränkt waren. Wenn es nicht sofort repariert wird, wird ein größeres Loch gegraben. Korrigieren Sie die Schrägstrichrichtung, während Sie gerade dabei sind.
Cchamberlain
@cchamberlain C: / foo / bar / baz ist vollkommen gültig, obwohl \ foo \ bar \ baz ebenfalls gültig ist (es bezieht sich auf das logische Laufwerk, auf dem sich das aktuelle Arbeitsverzeichnis befindet) / foo / bar / baz kann zu Mehrdeutigkeiten führen Befehlszeilen-Flags.
JAB
@JAB - Es ist wahr, dass Schrägstriche manchmal funktionieren, aber wie Sie betont haben, ist es nicht zuverlässig. cmd.exe reagiert auf eine Weise und macht eine andere. Autocomplete-Pausen. Die zugrunde liegende API versteht es, cmd.exe jedoch nicht in allen Fällen, und die sicherere Verwendung von Backslash führt dazu, dass Zeichenfolgen manchmal maskiert werden müssen. Es gibt bereits genügend Backslash-Müll für Befehlszeilen mit der Anzahl der Leerzeichen und Klammern, die in allgemeinen Windows-Pfaden vorhanden sind.
Kammerherr
2
Es ist keine Lösung. Technologie sollte ein Diener des Menschen sein, nicht der Mensch sollte ein Diener der Technologie sein.
Daniel Hári
4

Führen Sie unter Windows "cmd" als Administrator aus und führen Sie den Befehl aus.

"C:\Program Files\Git\mingw64\etc>"
"git config --system core.longpaths true"

oder Sie müssen für den Ordner chmod, in dem git installiert ist.

oder aktualisieren Sie Ihre Datei manuell, indem Sie zum Pfad "Git \ mingw64 \ etc" gehen.

[http]
    sslBackend = schannel
[diff "astextplain"]
    textconv = astextplain
[filter "lfs"]
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true
[credential]
    helper = manager
**[core]
    longpaths = true**
Kumar Abhishek
quelle