241 votes

Git - changement de cas d'un fichier sous Windows ?

Il y a quelques fichiers dans notre base de code contrôlée par git que j'aimerais renommer. Plus précisément, je veux juste changer la casse du fichier, de sorte que sourceCode.java devient SourceCode.java par exemple. Le problème : Je suis sur une machine Windows, et le système de fichiers pense qu'il s'agit du même nom de fichier.

Comment puis-je faire en sorte que Windows et git reconnaissent ce changement et l'enregistrent ?

6 votes

Depuis Git 2.0.1+ (juin 2014), un simple git mv devrait fonctionner ( stackoverflow.com/a/24979063/6309 ). Même sous Windows.

1 votes

Cette question n'est pas la même que le prétendu double : "Comment faire pour que git ignore les changements dans le cas".

380voto

Igor Zevaka Points 32586

Jetez un coup d'œil ici pour plus de conseils sur la façon de procéder :

http://stackoverflow.com/questions/52950/how-to-make-git-ignore-changes-in-case

Ou :

git mv -f name.java Name.java

8 votes

En outre, cela ne fonctionne pas sur un système de fichiers FAT. Je transporte du code de projet sur une clé USB et les changements de cas sont une vraie douleur.

2 votes

Cela n'a pas fonctionné pour moi sur un système NTFS et Windows 10.

3 votes

C'est certainement la façon correcte de procéder, mais si vous devez renommer un grand nombre de fichiers, cela peut être fastidieux. Si vous les avez déjà renommés d'une manière ou d'une autre dans le système de fichiers et que vous voulez simplement valider ces changements, vous pouvez renommer un dossier parent, faire une commande git add de ce dossier nouvellement renommé, NE CONFIRMEZ PAS, changez le nom du dossier en ce qu'il devrait être, git add encore une fois et ensuite s'engager.

53voto

ChrisF Points 74295

Si vous utilisez un système de fichiers FAT, votre seul choix est de procéder à un renommage en deux étapes :

  1. Renommer sourceCode.java à anything.you.like
  2. Renommer anything.you.like à SourceCode.java

À l'époque où nous utilisions Perforce, nous avions exactement ce problème et c'est la seule solution que nous ayons trouvée.

18 votes

Juste une note pour les autres : Il n'est pas nécessaire de commiter entre les deux, mais il est nécessaire d'ajouter à l'index pour que git remarque le changement.

34voto

Pieter van Ginkel Points 17057

Les étapes suivantes m'ont permis de changer le cas sur Windows :

  • Ajouter ignorecase = false à [core] sur .git/config ;
  • Déplacez les fichiers que vous allez renommer hors du répertoire de votre projet ;
  • Ajoutez les suppressions à l'index ;
  • Remettez tous les fichiers à leur emplacement d'origine et changez la casse des fichiers et/ou des répertoires ;
  • Ajouter tous les "nouveaux" fichiers à l'index ;
  • Retirer ignorecase = false ajouté lors de la première étape.

De cette façon, vous n'avez qu'un seul commit qui contient le renommage et il est facile de changer par exemple un répertoire entier.

5 votes

Faites-le pour les paramètres globaux et locaux : $ gti config --global core.ignorecase false $ gti config core.ignorecase false

0 votes

Pour que cela fonctionne pour le dépôt requis si une valeur spécifique a déjà été définie précédemment (pourrait être ignorée si vous savez qu'aucun réglage spécial n'a été effectué), et globalement pour que cela devienne une règle pour les nouveaux dépôts.

6voto

jwg Points 53

Faites attention. Faire cela peut conduire à des modifications impossibles à fusionner. Git s'embrouille lors de la fusion sous Windows car il ne peut pas décider si l'ancien nom en majuscules et le nouveau nom en minuscules sont le même fichier ou non (pour Git, ils ne le sont pas, mais pour le système de fichiers, ils le sont). Pour fusionner, vous devez effectuer un contournement manuel comme la suppression des fichiers avant la fusion.

Voir Problème de rebasement de Git avec des fichiers de même nom mais de casse différente

Je ne suis pas sûr que ce problème soit pire que d'avoir un fichier au nom non conventionnel dans votre projet pour toujours, mais il vaut la peine d'être connu s'il y a beaucoup d'utilisateurs avec beaucoup de branches qui devront toutes être fusionnées un jour.

0 votes

Les fichiers dont le nom n'est pas conventionnel dans les projets de moyenne ou grande envergure doivent toujours être évités si possible, car ils peuvent causer des problèmes lors du développement pour plusieurs plates-formes (le fait de retarder la correction de quelque chose comme ça jusqu'à plus tard rendra les problèmes de la correction plus graves). Parfois, vous développez sous Windows, mais vous avez également besoin de faire une compilation pour Linux, et un include qui fonctionnerait bien sous Windows entraîne une rupture de la compilation sous Linux.

1voto

Rainer Blome Points 15

Avec NTFS (ou FAT), une seule commande "git mv" ne résout pas le problème. Cette question montre une technique qui fonctionne : git mv et ne change que la casse du répertoire

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X