web-dev-qa-db-fra.com

Changer la casse d'un fichier sous Windows?

Il y a quelques fichiers dans notre base de code contrôlée par git que je voudrais 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 que ce sont le même nom de fichier.

Comment faire en sorte que Windows et Git reconnaissent ce changement et l’archivent?

182
Electrons_Ahoy

Jetez un coup d'oeil ici pour plus d'indications sur la façon de le faire:

Comment faire en sorte que git ignore les changements au cas où?

Ou:

git mv -f name.Java Name.Java
303
Igor Zevaka

Si vous êtes sur un système de fichiers FAT, votre seul choix est de renommer 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'était la seule solution que nous puissions trouver.

46
ChrisF

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

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

De cette façon, vous avez un seul commit contenant le renommage, ce qui facilite le changement, par exemple. un répertoire entier.

26

Faites attention. Cela peut entraîner des modifications impossibles à fusionner. Git est confus lors de la fusion sous Windows, car il ne peut pas décider si l'ancien nom en majuscule et le nouveau nom en minuscule 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 une solution de contournement manuelle, telle que la suppression des fichiers avant la fusion.

Voir Problème avec Git Rebase avec des fichiers du même nom mais avec une casse différente

Je ne sais pas si ce problème est pire que d'avoir un fichier de nom non conventionnel dans votre projet pour toujours, mais il est bon de savoir s'il y a beaucoup d'utilisateurs avec beaucoup de branches qui devront toutes être fusionnées par la suite.

6
jwg

Avec NTFS (ou FAT), un seul git mv La commande 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

1
Rainer Blome