web-dev-qa-db-fra.com

erreur git checkout: impossible de créer un fichier

Lors du clonage d'un référentiel git sous Linux sur un système Windows, l'erreur suivante s'affiche lors de l'extraction de la phase:

$ git clone gituser @ serveraddr: /git/git_repo.git git_WA
Clonage dans 'git_WA' ...
Le mot de passe de gituser @ serveraddr:
remote: Comptage d'objets: 500846, terminé.
remote: Compression d'objets: 100% (118676/118676), terminé.
à distance: Total 500846 (delta 307739), 483023 réutilisé (delta 291136)
Réception d'objets: 100% (500846/500846), 907,54 Mio | 9,04 Mio/s, fait.
Résolution des deltas: 100% (307739/307739), terminé. 

erreur: impossible de créer le fichier RealR ****************************************** ************************************************* ************************************************* ************************************************* ************* validation.xml (aucun fichier ou répertoire de ce type)
Extraction de fichiers: 100% (441329/441329)
Extraction de fichiers: 100% (441329/441329), terminé.
terminé.

Cas 2: cloné en tant que rapport nu, extrait de tout le rapport localement = = Même erreur.

Cas 3: clonez le référentiel directement dans C: \, finalisation de la transaction réussie, aucune erreur.

-> Cela ressemble à un problème de limitation de la longueur du nom de fichier/chemin du fichier. 

Cas 4: extraire les mêmes fichiers du référentiel SVN. Capable de commander à n'importe quel endroit sans aucun problème. Donc pas de problème du côté de Windows. (Oui, j'ai des données en SVN et GIT, je viens de migrer de SVN vers GIT).

Par conséquent, le problème doit être au sein de msysgit, une limitation de la longueur du chemin de fichier. La longueur du chemin dans gitclient/msysgit peut-elle être modifiée? 

Edit1: Toute opération essayée avec TortoiseGIT client v1.8.0 et git-bash: git version 1.8.0.msysgit.0 .
Edit2: Ajout de la commande réelle utilisée lors du clonage.

17
rohit

J'ai rencontré des problèmes similaires lors de l'extraction d'un projet dans un répertoire Windows comportant un chemin de base de 67 (Windows) ou de 76 (cygwin) - ajouté à la longueur du chemin des fichiers extraits, il dépassait le chemin de Windows. limite de longueur:

git checkout -f HEAD
error: unable to create file <194-character filepath> (No such file or directory)
fatal: cannot create directory at '<187-character directory path>': No such file
or directory

J'ai résolu le problème en vérifiant dans c:\git qui, avec 6 ou 15 caractères de longueur, conservait la longueur maximale du chemin sous la limite de Windows.

15
StevenHB

Essayer:

git config --system core.longpaths true

Cela lui permettra de récupérer les fichiers même avec des chemins de fichiers plus longs. Le problème avec ce serait lorsque vous essayez de le supprimer, car Windows ne permettra pas de supprimer un chemin plus long que le seuil autorisé. La solution consiste à renommer les dossiers du référentiel local afin de réduire la longueur totale du chemin. Par exemple, un chemin alpha/beta/gamma/universe.txt peut être limité à 1/2/3/universe.txt, de sorte que sa longueur se situe sous le seuil de la taille du fichier Windows.

6
Waqas Shah

De nombreuses API Windows sont limitées à 260 symboles pour le nom de chemin du fichier. Donc, git ne peut pas créer de fichiers avec des noms plus longs que 260 symboles. Le système de fichiers NTFS prend en charge les noms longs (32 Ko), mais il n’existe pas de moyen simple d’autoriser les noms longs pour les programmes.

Solution de contournement 1: déplacez votre projet vers un nouvel emplacement, plus proche de la racine du disque .

  • Tout devrait fonctionner correctement (en supposant qu'il n'y ait pas de fichiers avec le chemin plus long 260)

Désavantage:

  • Vous devez changer de lieu de projet

Solution de contournement 2: créez une jonction dans le dossier de votre projet à partir d'un dossier plus proche de la racine du disque et effectuez une copie git du dossier de jonction. Vous pouvez le faire avec la commande mklink ou Link Shell Extension .

Avantage:

  • Vous pouvez avoir des noms de fichiers longs (plus de 260)
  • Vous pouvez préserver l'emplacement du projet
  • Vous pouvez supprimer en toute sécurité la jonction après le clonage initial (si vous n'avez pas besoin de travailler avec des fichiers ne respectant pas la limite de 260 symboles à l'emplacement d'origine).

Désavantage:

  • Le nom de fichier complet à la jonction doit toujours contenir moins de 260 symboles. Sinon, cette solution ne vous aidera pas.
  • Si vous souhaitez modifier les fichiers avec une longue
5
Alexei Osipov

La seule suggestion que j'ai vue concernant un problème similaire était la suivante:

Solution: utilisez http://www.cygwin.com/

Ou au moins, vérifiez si une commande dans une session git-bash of msysgit fonctionne mieux.


Mise à jour mai 2015 (2 ans plus tard):

Note: le le dernier 2.4.1 proposé par git-for-windows :

core.longpaths::

Activez la prise en charge des chemins longs (> 260) pour les commandes intégrées de Git pour Windows.
Ceci est désactivé par défaut, les chemins longs n'étant pas pris en charge par l'explorateur Windows, cmd.exe et la chaîne d'outils Git pour Windows (msys, bash, tcl, Perl ...).
Activez cette option uniquement si vous savez ce que vous faites et si vous êtes prêt à vivre avec quelques bizarreries.

2
VonC

Utilisez Windows PowerShell. Travaillé pour moi.

0
Jamie Czerwinski