web-dev-qa-db-fra.com

Nom de fichier trop long dans Git pour Windows

J'utilise Git-1.9.0-preview20140217 pour Windows. Comme je le sais, cette version devrait résoudre le problème avec des noms de fichiers trop longs. Mais pas pour moi.

Sûrement je fais quelque chose de mal: j'ai fait git config core.longpaths true et git add . puis git commit. Tout s'est bien passé. Mais quand je fais maintenant un git status, je reçois une liste de fichiers avec Filename too long, par exemple:

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

C'est assez simple à reproduire pour moi: créez simplement une application web Yeoman avec le générateur Angular ("yo angular") et retirez node_modules du .gitignore fichier. Répétez ensuite les commandes Git susmentionnées.

Qu'est-ce que j'oublie ici?

536
Papa Mufflon

Git a une limite de 4096 caractères pour un nom de fichier, sauf sous Windows lorsque Git est compilé avec msys. Il utilise une version plus ancienne de l'API Windows et il y a une limite de 260 caractères pour un nom de fichier.

Donc, autant que je sache, c’est une limitation de msys et non de Git. Vous pouvez lire les détails ici: https://github.com/msysgit/git/pull/11

Vous pouvez contourner ce problème en utilisant un autre client Git sous Windows ou en définissant core.longpaths sur true comme expliqué dans d'autres réponses.

git config --system core.longpaths true

Git est construit comme une combinaison de scripts et de code compilé. Avec les modifications ci-dessus, certains scripts peuvent échouer. C'est la raison pour laquelle core.longpaths ne doit pas être activé par défaut.

La documentation de Windows sur https://docs.Microsoft.com/en-us/windows/desktop/fileio/naming-a-file contient des informations supplémentaires:

À partir de Windows 10, version 1607, les limitations de MAX_PATH ont été supprimées des fonctions de fichier et de répertoire Win32 courantes. Cependant, vous devez accepter le nouveau comportement.

Une clé de registre vous permet d'activer ou de désactiver le nouveau comportement de chemin d'accès long. Pour activer le comportement de chemin d'accès long, définissez la clé de registre dans HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)

452
iveqy

Vous devriez pouvoir exécuter la commande

git config --system core.longpaths true

ou ajoutez-le manuellement à l'un de vos fichiers de configuration Git pour activer cette fonctionnalité une fois que vous utilisez une version prise en charge de Git. Il semble que 1.9.0 et après.

984
sparkym3

Cela pourrait aider:

git config core.longpaths true

Explication de base: Cette réponse suggère de ne pas appliquer ce paramètre au système global (à tous les projets, évitant ainsi les configurations --system ou --global). Cette commande ne résout que le problème en étant spécifique au projet en cours.

179

Créez .gitconfig et ajoutez

[core]
longpaths = true

Vous pouvez créer le fichier dans un emplacement de projet (pas sûr) et également dans l'emplacement global. Dans mon cas, l'emplacement est C:\Users\{name}\.

63
Yash

La meilleure solution consiste à activer le paramètre longpath de Git.

git config --system core.longpaths true

Mais une solution de contournement qui fonctionne consiste à supprimer le dossier node_modules de Git:

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

Ajoutez node_modules dans une nouvelle ligne du fichier .gitignore. Après cela, appuyez sur vos modifications:

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

Étapes à suivre:

  1. Exécuter Git Bash en tant que administrateur
  2. Exécuter la commande git config --system core.longpaths true

En savoir plus sur git confighere .

31
Saikat Sengupta

Pour être tout à fait sûr qu'il prend effet immédiatement après l'initialisation du référentiel, mais avant l'extraction de l'historique distant ou l'extraction de tous les fichiers, il est plus prudent de l'utiliser de cette façon:

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

-c clé = valeur

Définissez une variable de configuration dans le référentiel nouvellement créé. cela prend effet immédiatement après l'initialisation du référentiel, mais avant l'extraction de l'historique distant ou l'extraction de tous les fichiers. La clé est dans le même format que celui attendu par git-config 1 (par exemple, core.eol = true). Si plusieurs valeurs sont données pour la même clé, chaque valeur sera écrite dans le fichier de configuration. Cela permet par exemple d'ajouter en toute sécurité des références de récupération supplémentaires à la télécommande Origin.

Plus d'infos

28
gugol

L'exécution de git config --system core.longpaths true m'a généré une erreur:

"erreur: impossible de verrouiller le fichier de configuration C:\Program Files (x86)\Git\mingw32/etc/gitconfig: autorisation refusée"

Correction de l'exécution de la commande au niveau global:

git config --global core.longpaths true
12
Arpit

Vous pouvez également essayer d'activer les chemins de fichiers longs.

Si vous exécutez Windows 10 Édition familiale, vous pouvez modifier votre registre pour activer les longs chemins.

Allez à HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem dans regedit, puis définissez LongPathsEnabled sur 1.

Si vous utilisez Windows 10 Pro ou Enterprise, vous pouvez également utiliser les stratégies de groupe local.

Allez dans Configuration de l'ordinateurModèles d'administrationSystèmeSystème de fichiers dans gpedit.msc, ouvrez Activer les chemins longs Win32 et définissez-le sur Enabled.

7
Julian Veerkamp

Déplacer le référentiel à la racine de votre lecteur (solution temporaire)

Vous pouvez essayer de déplacer temporairement le référentiel local (tout le dossier) vers la racine de votre lecteur ou le plus près possible de la racine.

Comme le chemin est plus petit à la racine du lecteur, les problèmes sont parfois résolus.

Sous Windows, je déplacerais ceci vers C:\ ou la racine d'un autre lecteur.

4
Dheeraj Bhaskar

J'avais aussi cette erreur, mais dans mon cas, la cause utilisait une version obsolète de npm, v1.4.28.

Mise à jour vers npm v3 suivi de

rm -rf node_modules
npm -i

a travaillé pour moi. Le numéro 2697 de npm contient des détails sur la structure de dossiers "à plat maximal" incluse dans npm v3 (publiée le 2015-06-25).

2
James Green

Si vous travaillez avec votre partition chiffrée, envisagez de déplacer le dossier vers une partition non chiffrée, par exemple un / tmp, exécutant git pull, puis revenez en arrière.

1
augustowebd