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?
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)
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.
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.
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}\
.
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
git config --system core.longpaths true
En savoir plus sur git config
here .
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.
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
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'ordinateur → Modèles d'administration → Système → Système de fichiers dans gpedit.msc
, ouvrez Activer les chemins longs Win32 et définissez-le sur Enabled.
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.
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).
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.