it-swarm.com.de

Dateiname in Git für Windows zu lang

Ich verwende Git-1.9.0-preview20140217 für Windows. Wie ich weiß, sollte diese Version das Problem mit zu langen Dateinamen beheben. Aber nicht für mich.

Sicher mache ich etwas falsch: Ich habe git config core.longpaths true und git add . und dann git commit gemacht. Alles gut gelaufen. Aber wenn ich jetzt einen git status mache, erhalte ich eine Liste von Dateien mit Filename too long, zum Beispiel:

node_modules/grunt-contrib-imagemin/node_modules/pngquant-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js: Filename too long

Es ist für mich ganz einfach zu reproduzieren: erstelle einfach eine Yeoman Webanwendung mit dem Angular Generator ("yo angular") und entferne node_modules aus dem .gitignore Datei. Wiederholen Sie dann die oben genannten Git-Befehle.

Was vermisse ich hier?

536
Papa Mufflon

Git hat ein Limit von 4096 Zeichen für einen Dateinamen, außer unter Windows, wenn Git mit msys kompiliert wird. Es wird eine ältere Version der Windows-API verwendet und der Dateiname darf maximal 260 Zeichen lang sein.

Soweit ich das verstehe, ist es eine Einschränkung von msys und nicht von Git. Sie können die Details hier lesen: https://github.com/msysgit/git/pull/11

Sie können dies umgehen, indem Sie einen anderen Git-Client unter Windows verwenden oder core.longpaths auf true setzen, wie in anderen Antworten erläutert.

git config --system core.longpaths true

Git ist eine Kombination aus Skripten und kompiliertem Code. Mit der obigen Änderung können einige der Skripte fehlschlagen. Dies ist der Grund dafür, dass core.longpaths standardmäßig nicht aktiviert ist.

Die Windows-Dokumentation unter https://docs.Microsoft.com/en-us/windows/desktop/fileio/naming-a-file enthält weitere Informationen:

Ab Windows 10, Version 1607, wurden die MAX_PATH-Einschränkungen für allgemeine Win32-Datei- und -Verzeichnisfunktionen entfernt. Sie müssen sich jedoch für das neue Verhalten anmelden.

Mit einem Registrierungsschlüssel können Sie das neue Verhalten bei langen Pfaden aktivieren oder deaktivieren. Um das Verhalten bei langen Pfaden zu aktivieren, legen Sie den Registrierungsschlüssel unter HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Typ: REG_DWORD) fest.

452
iveqy

Sie sollten in der Lage sein, den Befehl auszuführen

git config --system core.longpaths true

oder fügen Sie es manuell zu einer Ihrer Git-Konfigurationsdateien hinzu, um diese Funktion zu aktivieren, sobald Sie eine unterstützte Version von Git verwenden. Es sieht aus wie vielleicht 1.9.0 und danach.

984
sparkym3

Dies könnte helfen:

git config core.longpaths true

Grundlegende Erklärung: In dieser Antwort wird vorgeschlagen, diese Einstellung nicht auf das globale System anzuwenden (für alle Projekte, bei denen das --system - oder --global -Tag vermieden wird). Dieser Befehl löst das Problem nur, indem er für das aktuelle Projekt spezifisch ist.

179

Erstellen Sie .gitconfig und fügen Sie hinzu

[core]
longpaths = true

Sie können die Datei an einem Projektspeicherort (nicht sicher) und auch am globalen Speicherort erstellen. In meinem Fall ist der Ort C:\Users\{name}\.

63
Yash

Die bessere Lösung ist, den Longpath-Parameter von Git zu aktivieren.

git config --system core.longpaths true

Aber ein Workaround, der funktioniert, ist das Entfernen des node_modules Ordners von Git:

$ git rm -r --cached node_modules
$ vi .gitignore

Fügen Sie node_modules in einer neuen Zeile in der .gitignore-Datei hinzu. Übertragen Sie anschließend Ihre Änderungen:

$ git add .gitignore
$ git commit -m "node_modules removed"
$ git Push
34
Janderson Silva

Schritte zum folgen:

  1. Führe Git Bash als Administrator aus
  2. Führen Sie den Befehl git config --system core.longpaths true aus.

Lesen Sie mehr über git confighier .

31
Saikat Sengupta

Um sicherzugehen, dass es sofort nach der Initialisierung des Repositorys wirksam wird, aber bevor der Remote-Verlauf abgerufen oder Dateien ausgecheckt werden, ist es sicherer, es wie folgt zu verwenden:

git clone -c core.longpaths=true <repo-url>

-c Schlüssel = Wert

Legen Sie eine Konfigurationsvariable im neu erstellten Repository fest. Dies wird sofort nach der Initialisierung des Repositorys wirksam, jedoch bevor der Remote-Verlauf abgerufen oder Dateien ausgecheckt werden. Der Schlüssel hat dasselbe Format wie von git-config 1 erwartet (z. B. core.eol = true). Wenn für denselben Schlüssel mehrere Werte angegeben werden, wird jeder Wert in die Konfigurationsdatei geschrieben. Dies macht es beispielsweise sicher, der Origin-Fernbedienung zusätzliche Fetch-Refspecs hinzuzufügen.

Mehr Infos

28
gugol

Beim Ausführen von git config --system core.longpaths true ist mir ein Fehler unterlaufen:

"Fehler: Konfigurationsdatei C:\Programme (x86)\Git\mingw32/etc/gitconfig konnte nicht gesperrt werden: Berechtigung verweigert"

Behoben bei der Ausführung des Befehls auf globaler Ebene:

git config --global core.longpaths true
12
Arpit

Sie können auch versuchen, lange Dateipfade zu aktivieren.

Wenn Sie Windows 10 Home Edition ausführen, können Sie Ihre Registrierung ändern, um lange Pfade zu aktivieren.

Gehen Sie zu HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem in regedit und setzen Sie LongPathsEnabled auf 1.

Wenn Sie Windows 10 Pro oder Enterprise verwenden, können Sie auch lokale Gruppenrichtlinien verwenden.

Gehe zu ComputerkonfigurationAdministrative VorlagenSystemDateisystem in gpedit.msc, öffne Aktivieren Sie lange Win32-Pfade und setzen Sie ihn auf Aktiviert.

7
Julian Veerkamp

Repository in das Stammverzeichnis Ihres Laufwerks verschieben (temporäre Korrektur)

Sie können versuchen, das lokale Repository (den gesamten Ordner) vorübergehend in das Stammverzeichnis Ihres Laufwerks oder so nah wie möglich an das Stammverzeichnis zu verschieben.

Da der Pfad im Stammverzeichnis des Laufwerks kleiner ist, werden die Probleme manchmal behoben.

Unter Windows würde ich dies in C:\ oder in das Stammverzeichnis eines anderen Laufwerks verschieben.

4
Dheeraj Bhaskar

Ich hatte auch diesen Fehler, aber in meinem Fall war die Ursache die Verwendung einer veralteten Version von npm, v1.4.28.

Update auf npm v3 gefolgt von

rm -rf node_modules
npm -i

arbeitete für mich. Die npm-Ausgabe 2697 enthält Details zur Ordnerstruktur "maximal flach" in npm v3 (veröffentlicht am 25.06.2015).

2
James Green

Wenn Sie mit Ihrer verschlüsselten Partition arbeiten, ziehen Sie in Betracht, den Ordner auf eine unverschlüsselte Partition zu verschieben, z. B. a / tmp, git pull auszuführen und dann zurückzukehren.

1
augustowebd