git pull interrotto con errore nome file troppo lungo


114

Utilizzo Windows come sistema operativo e lavoro a un progetto con un amico che utilizza un Mac. Ha registrato il codice sul nostro GitHub.

Stavo cercando di eseguire il pull di git tutto ciò che ha fatto e si è interrotto con errori "nome file troppo lungo" del codice di terze parti.

Cosa posso fare?


Questo problema ha due casi principalmente diversi, a seconda dell'operazione. Se il repository esiste già, è possibile modificarne la configurazione. Ma se no? Per la clonazione / checkout con la creazione di una nuova directory solo la risposta di @AlexRosenfeld aiuterà.
Gangnus

Risposte:


200

Le domande frequenti su msysgit su Git non possono creare una directory di file con un percorso lungo non sembrano aggiornate, poiché si collega ancora al vecchio ticket msysgit # 110 . Tuttavia, secondo il ticket successivo # 122 il problema è stato risolto in msysgit 1.9, quindi:

  1. Aggiorna a msysgit 1.9 (o successivo)
  2. Avvia Git Bash
  3. Vai al tuo repository Git che "soffre" di problemi di percorsi lunghi
  4. Abilita il supporto per percorsi lunghi con git config core.longpaths true

Finora, ha funzionato molto bene per me.

Sii consapevole dell'avviso importante nel commento sul ticket # 122

non tornare qui e lamentarti che danneggia Windows Explorer, cmd.exe, bash o qualsiasi altro strumento che stai utilizzando.


Ci sono alcuni aggiornamenti, sembra che ci sia qualche script aggiuntivo che devi eseguire dopo l'installazione di mysysgit github.com/msysgit/git/pull/122#issuecomment-43653756
Adam Grant

18
Ciò per cui ha effettivamente funzionato era: git config --global core.longpaths true
Anton Andreev

@AntonAndreev Sì, se desideri impostarlo in ambito globale, va bene. Anche l'ambito locale per repository è perfettamente valido.
mloskot

Non ha funzionato per me senza impostarlo a livello globale.
Anton Andreev

1
In questo modo non funzionerà per la clonazione / checkout con la creazione di una nuova directory. Solo la risposta di @AlexRosenfeld aiuterà.
Gangnus

69

Soluzione 1 : imposta la configurazione globale, eseguendo questo comando:

git config --system core.longpaths true

Solution2 - oppure puoi modificare direttamente il tuo file git config specifico come di seguito:

YourRepoFolder -> .git -> config:

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

Solution3 - durante la clonazione di un nuovo repository: qui .


1
In questo modo non funzionerà per la clonazione / checkout con la creazione di una nuova directory. Solo la risposta di @AlexRosenfeld aiuterà.
Gangnus

Ho aggiornato la risposta con quello, per avere in un posto, grazie.
Daniel Hári

26

Qualche anno in ritardo, ma vorrei aggiungere che se hai bisogno di farlo in un colpo solo (come ho fatto io) puoi impostare le impostazioni di configurazione durante il comando clone. Prova questo:

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

1
Salute amico! Questo ha funzionato alla grande durante la clonazione di una nuova directory da GitHub.
Jay Killeen

Nessun problema contento che abbia aiutato!
xandermonkey

1
Sì! Questo e per la clonazione - funziona solo questo!
Gangnus

Questo non funziona, la mia clonazione viene comunque interrotta. Sto usando git version 1.8.4.msysgit.0, qualche idea?
Soluzione semplice

Sembra che sia deprecato . Forse provare a usare git-scm? Che errore ricevi?
xandermonkey

12

Apri il tuo file.gitconfig per aggiungere la proprietà longpaths. Quindi sarà simile al seguente:

[core]
symlinks = false
autocrlf = true
longpaths = true

1
In questo modo non funzionerà per la clonazione / checkout con la creazione di una nuova directory. Solo la risposta di @AlexRosenfeld aiuterà.
Gangnus

6

Come qualcuno che ha riscontrato costantemente questo problema con i repository java su Windows, la soluzione migliore è installare Cygwin ( https://www.cygwin.com/ ) e utilizzare la sua installazione git in all> devel> git.

Il motivo per cui questa è la migliore soluzione che ho incontrato è che Cygwin gestisce i nomi dei percorsi lunghi, quindi altri comandi forniti ne traggono vantaggio. Es: find, cp e rm. Credimi, il vero problema inizia quando devi eliminare i nomi di percorso che sono troppo lunghi in Windows.


4

Cerca di mantenere i tuoi file più vicini alla radice del file system. Maggiori dettagli: per motivi tecnici, Git per Windows non può creare file o directory quando il percorso assoluto è più lungo di 260 caratteri .


Sembra che possa andare solo a 130 [forse Windows usa caratteri Unicode a doppio byte sotto] per impostazione predefinita [?]
rogerdpack

5
Più persone dovrebbero spingere Microsoft a modificare questa restrizione (e correggere le API legacy che danneggiano). Non c'è motivo per cui dovremmo ancora convivere con questo residuo di giorni in cui i nomi dei file erano limitati a <8>. <3> caratteri. Non fissandolo immediatamente, viene scavato un buco più grande. Correggi la direzione della barra mentre ci sei.
cchamberlain

@cchamberlain C: / foo / bar / baz è perfettamente valido, sebbene sia valido anche \ foo \ bar \ baz (si riferirà a qualsiasi unità logica su cui si trova la directory di lavoro corrente) / foo / bar / baz può causare ambiguità con flag della riga di comando.
JAB

@JAB - È vero che a volte la barra in avanti funziona ma come hai sottolineato non è affidabile. cmd.exe reagirà in un modo e powershell in un altro. Interruzioni di completamento automatico. L'API sottostante lo comprende, ma cmd.exe non lo capisce in tutti i casi e l'uso più sicuro della barra rovesciata fa sì che le stringhe a volte necessitino di escape. È già presente una quantità sufficiente di spazzatura barra rovesciata della riga di comando con il numero di spazi e parentesi presenti nei percorsi comuni di Windows.
cchamberlain

2
Non è una soluzione. La tecnologia dovrebbe essere al servizio dell'uomo, non l'uomo dovrebbe essere al servizio della tecnologia.
Daniel Hári

4

Su Windows esegui "cmd" come amministratore ed esegui il comando.

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

oppure devi chmod per la cartella in cui è installato git.

o manullay aggiorna il tuo file manualmente andando al percorso "Git \ mingw64 \ etc"

[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**
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.