1883 votes

Comment valider les changements de noms de fichiers en respectant la casse dans Git ?

J'ai changé le nom de quelques fichiers en dé-capitalisant la première lettre, comme dans Name.jpg a name.jpg . Git ne reconnaît pas ces changements et j'ai dû supprimer les fichiers et les télécharger à nouveau. Existe-t-il un moyen pour que Git soit sensible à la casse lors de la vérification des changements dans les noms de fichiers ? Je n'ai apporté aucune modification au fichier lui-même.

5 votes

@nif ce n'est pas tout à fait correct, Git a en fait un paramètre de configuration qui contrôle si oui ou non il ignore la sensibilité à la casse.

10 votes

Ver stackoverflow.com/a/24979063/6309 : depuis git 2.0.1, un simple git mv travaux.

0 votes

2107voto

Keith Smiley Points 9760

Tant que vous ne faites que renommer une fichier et non un dossier vous pouvez simplement utiliser git mv :

git mv -f yOuRfIlEnAmE yourfilename

(En date du un changement dans Git 2.0.1, la fonction -f dans l'incantation ci-dessus est superflu, mais il était nécessaire dans les anciennes versions de Git).

13 votes

Cela me donne "le répertoire source est vide" alors qu'il ne l'est pas.

0 votes

J'ai essayé et j'ai obtenu fatal: renaming '...' failed: File exists . Je fais cela dans une machine virtuelle Ubuntu, qui fonctionne sous OSX.

12 votes

J'utilise MacOS ici (FS insensible à la casse) et -f a fonctionné ! Merci pour le conseil

1484voto

Cupcake Points 22154

Git possède un paramètre de configuration qui lui indique s'il doit s'attendre à un système de fichiers sensible à la casse ou non : core.ignorecase . Pour dire à Git d'être sensible à la casse, il suffit de mettre ce paramètre à false . (Attention si vous avez déjà poussé les fichiers, alors vous devez d'abord les déplacer en donnant les autres réponses).

git config core.ignorecase false

Notez que la définition de cette option à false sur un système de fichiers insensible à la casse est généralement une mauvaise idée. Cela conduira à des erreurs bizarres. Par exemple, renommer un fichier d'une manière qui ne modifie que la casse des lettres fera en sorte que git rapporte de faux conflits ou crée des fichiers en double. (d'après le commentaire de Mark Amery) .

Documentation

De la git config documentation :

core.ignorecase

Si elle est vraie, cette option active diverses solutions de contournement pour permettre à git de mieux fonctionner sur des systèmes de fichiers qui ne sont pas sensibles à la casse, comme FAT. Par exemple, si une liste de répertoires trouve makefile quand git attend Makefile git supposera qu'il s'agit bien du même fichier, et continuera à s'en souvenir en tant que Makefile .

La valeur par défaut est false, sauf git-clone(1) o git-init(1) va sonder et fixer core.ignorecase true si cela est approprié lorsque le référentiel est créé.

Systèmes de fichiers insensibles à la casse

Les deux systèmes d'exploitation les plus populaires qui ont des systèmes de fichiers insensibles à la casse sont, à ma connaissance, les suivants

  • Windows
  • OS X

0 votes

C'est une bonne réponse et cela a fonctionné pour moi, mais soyez prudent en faisant cela car cela change votre environnement de production. Réfléchissez donc bien à ce changement avant de l'effectuer.

2 votes

Il s'avère que c'était activé par défaut dans un projet. Ça a rendu la vie intéressante pendant un moment.

0 votes

On dirait que vous devez le faire pour chaque dépôt git que vous avez. Comment le définir de manière globale ?

258voto

Chris Barr Points 3568

En utilisant SourceTree, j'ai pu faire tout cela à partir de l'interface utilisateur.

  1. Renommer FILE.ext a whatever.ext
  2. Scène ce fichier
  3. Maintenant renommer whatever.ext a file.ext
  4. Scène ce fichier à nouveau

C'est un peu fastidieux, mais si vous n'avez besoin de le faire que pour quelques fichiers, c'est assez rapide.

159voto

Sijmen Mulder Points 1935

C'est ce que j'ai fait sous OS X :

git mv File file.tmp
git mv file.tmp file

Deux étapes car sinon j'ai eu une erreur "file exists". Peut-être que cela peut être fait en une seule étape en ajoutant --cached ou autre.

25 votes

Comme le suggère la première réponse, -f (force) est le drapeau que vous recherchez

7 votes

@rperryng - non, le -f n'est pas utile si le FS sous-jacent n'est pas sensible à la casse. Cependant, une solution en deux étapes a fonctionné pour moi

0 votes

En utilisant un FS (sur Mac) insensible à la casse et -f travaillé ! Merci pour le conseil

124voto

andrewvergel Points 721

J'ai utilisé les étapes suivantes :

git rm -r --cached .
git add --all .
git commit -a -m "Versioning untracked files"
git push origin master

Pour moi, c'est une solution simple

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