git pull abandonné avec un nom de fichier d'erreur trop long

114

J'utilise Windows comme système d'exploitation et je travaille sur un projet avec un ami qui utilise un Mac. Il a enregistré le code sur notre Github.

J'essayais de tirer tout ce qu'il faisait et cela a été abandonné avec des erreurs "nom de fichier trop long" du code tiers.

Que puis-je faire?

Dave Martin
la source
Ce problème a deux cas principalement différents, en fonction de votre opération. Si le référentiel existe déjà, vous pouvez modifier sa configuration. Mais sinon? Pour le clonage / extraction avec création d'un nouveau répertoire, seule la réponse de @AlexRosenfeld vous aidera.
Gangnus

Réponses:

200

La FAQ msysgit sur Git ne peut pas créer un répertoire de fichiers avec un long chemin ne semble pas à jour, car il est toujours lié à l'ancien ticket msysgit # 110 . Cependant, selon le ticket # 122 plus récent, le problème a été corrigé dans msysgit 1.9, ainsi:

  1. Mettre à jour vers msysgit 1.9 (ou version ultérieure)
  2. Lancez Git Bash
  3. Accédez à votre référentiel Git qui `` souffre '' d'un problème de chemins longs
  4. Activer la prise en charge des longs chemins avec git config core.longpaths true

Jusqu'à présent, cela a très bien fonctionné pour moi.

Soyez conscient de l'avis important en commentaire sur le billet # 122

ne revenez pas ici et ne vous plaignez pas que cela casse Windows Explorer, cmd.exe, bash ou tout autre outil que vous utilisez.

mloskot
la source
Il y a quelques mises à jour, il semble qu'il y ait un script supplémentaire que vous devez exécuter après l'installation de mysysgit github.com/msysgit/git/pull/122#issuecomment-43653756
Adam Grant
18
Ce qui a réellement fonctionné était: git config --global core.longpaths true
Anton Andreev
@AntonAndreev Ouais, si vous souhaitez le définir dans une portée globale, c'est OK. La portée locale par référentiel est également parfaitement valide.
mloskot
Cela n'a pas fonctionné pour moi sans le mettre au niveau mondial.
Anton Andreev
1
Cela ne fonctionnera pas pour le clonage / l'extraction avec la création d'un nouveau répertoire. Seule la réponse de @AlexRosenfeld vous aidera.
Gangnus
69

Solution1 - définissez la configuration globale, en exécutant cette commande:

git config --system core.longpaths true

Solution2 - ou vous pouvez modifier directement votre fichier de configuration git spécifique comme ci-dessous:

YourRepoFolder -> .git -> config:

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

Solution3 - lors du clonage d'un nouveau référentiel: ici .

Daniel Hári
la source
1
Cela ne fonctionnera pas pour le clonage / l'extraction avec la création d'un nouveau répertoire. Seule la réponse de @AlexRosenfeld vous aidera.
Gangnus
J'ai mis à jour la réponse avec cela, d'avoir à un endroit, merci.
Daniel Hári
26

Quelques années de retard, mais j'aimerais ajouter que si vous devez le faire d'un seul coup (comme je l'ai fait), vous pouvez définir les paramètres de configuration lors de la commande de clonage. Essaye ça:

git clone -c core.longpaths=true <your.url.here>
xandermonkey
la source
1
Salut mon pote! Cela a très bien fonctionné lors du clonage d'un nouveau répertoire depuis github.
Jay Killeen
Aucun problème, content que cela ait aidé!
xandermonkey
1
Oui! Celui-ci, et pour le clonage - seul celui-ci fonctionne!
Gangnus
Cela ne fonctionne pas, mon clonage est toujours interrompu. J'utilise git version 1.8.4.msysgit.0, une idée?
Simple-Solution
Il semble que ce soit obsolète . Essayez peut-être d'utiliser git-scm? Quelle erreur obtenez-vous?
xandermonkey
12

Ouvrez votre fichier.gitconfig pour ajouter la propriété longpaths. Cela ressemblera donc à ce qui suit:

[core]
symlinks = false
autocrlf = true
longpaths = true
Pete
la source
1
Cela ne fonctionnera pas pour le clonage / l'extraction avec la création d'un nouveau répertoire. Seule la réponse de @AlexRosenfeld vous aidera.
Gangnus
6

En tant que personne qui a constamment rencontré ce problème avec les référentiels java sous Windows, la meilleure solution est d'installer Cygwin ( https://www.cygwin.com/ ) et d'utiliser son installation git sous all> devel> git.

La raison pour laquelle c'est la meilleure solution que j'ai rencontrée est que Cygwin gère les noms de chemins longs, donc d'autres commandes fournies en bénéficient. Ex: find, cp et rm. Croyez-moi, le vrai problème commence lorsque vous devez supprimer des noms de chemin trop longs dans Windows.

Tristan
la source
4

Essayez de garder vos fichiers plus près de la racine du système de fichiers. Plus de détails: pour des raisons techniques, Git pour Windows ne peut pas créer de fichiers ou de répertoires lorsque le chemin absolu est supérieur à 260 caractères .

Michael Ver
la source
Il semble que cela ne puisse aller qu'à 130 [peut-être que Windows utilise des caractères Unicode à deux octets en dessous] par défaut [?]
rogerdpack
5
Davantage de personnes devraient pousser Microsoft à modifier cette restriction (et à corriger les API héritées qu'elles cassent). Il n'y a aucune raison que nous vivions encore avec ce reste de jours où les noms de fichiers étaient limités à <8>. <3> caractères. En ne le réparant pas immédiatement, un plus grand trou est creusé. Fixez la direction de la barre oblique pendant que vous y êtes.
cchamberlain
@cchamberlain C: / foo / bar / baz est parfaitement valide, bien que \ foo \ bar \ baz soit également valide (il fera référence à n'importe quel lecteur logique sur lequel se trouve le répertoire de travail actuel) / foo / bar / baz peut provoquer une ambiguïté avec indicateurs de ligne de commande.
JAB
@JAB - Il est vrai que la barre oblique fonctionne parfois mais comme vous l'avez souligné, elle n'est pas fiable. cmd.exe réagira dans un sens et PowerShell dans un autre. Pauses de saisie semi-automatique. L'API sous-jacente le comprend, mais cmd.exe ne le fait pas dans tous les cas et l'utilisation plus sûre de la barre oblique inverse entraîne parfois un échappement des chaînes. Il y a déjà suffisamment de déchets de barre oblique inverse de ligne de commande avec le nombre d'espaces et de parenthèses qui existent dans les chemins Windows courants.
cchamberlain
2
Ce n'est pas une solution. La technologie doit être au service de l'homme, et non l'homme doit être au service de la technologie.
Daniel Hári
4

Sous Windows, exécutez "cmd" en tant qu'administrateur et exécutez la commande.

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

ou vous devez chmod pour le dossier où git est installé.

ou mettez à jour manuellement votre fichier en allant sur le chemin "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**
Kumar Abhishek
la source