it-swarm.it

Nome file troppo lungo in Git per Windows

Sto usando Git-1.9.0-preview20140217 per Windows. Come so, questa versione dovrebbe risolvere il problema con nomi di file troppo lunghi. Ma non per me.

Sicuramente sto facendo qualcosa di sbagliato: ho fatto git config core.longpaths true e git add . e poi git commit. Tutto andò bene. Ma quando ora faccio un git status, ottengo un elenco di file con Filename too long, ad esempio:

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

È abbastanza semplice da riprodurre per me: basta creare un'applicazione Yeoman web con il generatore Angular ("yo angular") e rimuovere node_modules dal file .gitignore. Quindi ripetere i comandi Git di cui sopra.

Cosa mi manca qui?

491
Papa Mufflon

Git ha un limite di 4096 caratteri per un nome file, tranne su Windows quando Git è compilato con msys. Utilizza una versione precedente dell'API di Windows e c'è un limite di 260 caratteri per un nome file.

Quindi, per quanto ho capito, è una limitazione di msys e non di Git. Puoi leggere i dettagli qui: https://github.com/msysgit/git/pull/110

È possibile aggirare questo problema utilizzando un altro client Git su Windows o impostare core.longpaths su true come spiegato in altre risposte.

git config --system core.longpaths true

Git è costruito come una combinazione di script e codice compilato. Con la modifica di cui sopra alcuni degli script potrebbero fallire. Questa è la ragione per cui core.longpaths non deve essere abilitato di default.

La documentazione di windows su https://docs.Microsoft.com/en-us/windows/desktop/fileio/naming-a-file ha qualche informazione in più:

A partire da Windows 10, versione 1607, le limitazioni MAX_PATH sono state rimosse dalle comuni funzioni di file e directory di Win32. Tuttavia, è necessario attivare il nuovo comportamento.

Una chiave di registro consente di abilitare o disabilitare il nuovo comportamento del percorso lungo. Per abilitare il comportamento del percorso lungo, impostare la chiave del Registro di sistema su HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Tipo: REG_DWORD)

367
iveqy

Dovresti essere in grado di eseguire il comando

git config --system core.longpaths true

o aggiungilo manualmente a uno dei tuoi file di configurazione Git per attivare questa funzionalità, una volta che sei su una versione supportata di Git. Sembra forse 1.9.0 e dopo.

966
sparkym3

Questo potrebbe aiutare:

git config core.longpaths true

Spiegazione di base: questa risposta suggerisce di non applicare tale impostazione al sistema globale (a tutti i progetti in modo da evitare configurazioni --system o --global). Questo comando risolve solo il problema essendo specifico per il progetto corrente.

167

Crea .gitconfig e aggiungi

[core]
longpaths = true

È possibile creare il file in una posizione del progetto (non sicuro) e anche nella posizione globale. Nel mio caso la posizione è C:\Users\{name}\.

58
Yash

La soluzione migliore è abilitare il parametro longpath da Git.

git config --system core.longpaths true

Ma una soluzione che funziona è rimuovere la cartella node_modules da Git:

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

Aggiungi node_modules in una nuova riga all'interno del file .gitignore. Dopo aver fatto ciò, invia le tue modifiche:

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

Passi da seguire:

  1. Start Git Bash as administrator
  2. Esegui il comando git config --system core.longpaths true

Maggiori informazioni su git confighere .

29
Saikat

Per essere completamente sicuri che abbia effetto immediatamente dopo l'inizializzazione del repository, ma prima che venga recuperata la cronologia remota o che tutti i file siano stati estratti, è più sicuro utilizzarlo in questo modo:

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

-c chiave = valore

Imposta una variabile di configurazione nel repository appena creato; questo ha effetto immediatamente dopo l'inizializzazione del repository, ma prima che venga recuperata la cronologia remota o che tutti i file siano stati estratti. La chiave è nello stesso formato previsto da git-config 1 (ad esempio, core.eol = true). Se vengono assegnati più valori per la stessa chiave, ciascun valore verrà scritto nel file di configurazione. Ciò rende più sicuro, ad esempio, aggiungere ulteriori punti di riferimento al telecomando Origin.

Ulteriori informazioni

25
gugol

Si potrebbe anche provare a abilitare percorsi di file lunghi.

Se si esegue Windows 10 Home Edition, è possibile modificare il Registro di sistema per abilitare i percorsi lunghi.

Vai a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem in regedit e quindi imposta LongPathsEnabled su 1.

Se si dispone di Windows 10 Pro o Enterprise, è possibile utilizzare anche Criteri di gruppo locali.

Vai a Configurazione computer Modelli amministrativi Sistema Filesystem in gpedit.msc, apri Abilita percorsi lunghi Win32 e impostalo su Abilitato .

7
Julian Veerkamp

L'esecuzione di git config --system core.longpaths true mi ha generato un errore:

"errore: impossibile bloccare il file di configurazione C:\Programmi (x86)\Git\mingw32/etc/gitconfig: autorizzazione negata"

Risolto problema con l'esecuzione del comando a livello globale:

git config --global core.longpaths true
5
Arpit

Spostare il repository nella directory principale dell'unità (correzione temporanea)

È possibile provare a spostare temporaneamente il repository locale (l'intera cartella) nella directory principale dell'unità o quanto più vicino possibile alla radice.

Poiché il percorso è più piccolo nella radice dell'unità, a volte risolve i problemi.

Su Windows, lo sposterei in C:\ o nella root di un'altra unità.

4
Dheeraj Bhaskar

Ho avuto anche questo errore, ma nel mio caso la causa stava usando una versione obsoleta di npm, v1.4.28.

Aggiornamento a npm v3 seguito da

rm -rf node_modules
npm -i

ha funzionato per me npm 2697 ha dettagli sulla struttura delle cartelle "massimamente piatta" inclusa in npm v3 (rilasciata il 2015-06-25).

2
James Green

Se si sta lavorando con la partizione crittografata, prendere in considerazione lo spostamento della cartella in una partizione non crittografata, ad esempio un/tmp , eseguendo git pull e quindi spostandosi indietro.

1
augustowebd