109 votes

Git n'est pas sensible à la casse ?

Dans le premier engagement de mon partiel intitulé _Electronics il a été écrit en commençant par une majuscule, puis je l'ai changé en _electronics .

Git sous cygwin a ignoré le cas après la validation du nouveau nom, j'ai donc changé le nom à la main dans le dépôt cible.

Maintenant, il change parfois le commited _electronics partiel à _Electronics .

Qu'est-ce que j'ai fait de mal ?

9 votes

Quel est votre système d'exploitation ?

10 votes

Quel système de fichiers utilisez-vous ?

0 votes

Windows avec cygwin. Mon serveur fonctionne sous Ubuntu Linux. Je ne connais pas le système de fichiers, je suppose ext3 ou ext2 - mon fournisseur a configuré l'installation minimale.

122voto

manojlds Points 96599

Cela va dépendre de la core.ignorecase qui a la valeur false dans les systèmes de fichiers sensibles à la casse et true dans msysgit sous Windows.

core.ignorecase

Si elle est vraie, cette option permet d'activer 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. Pour Par exemple, si une liste de répertoires trouve "makefile" alors que git attend "Makefile", git supposera qu'il s'agit réellement du même fichier et continuera et continuera à s'en souvenir comme "Makefile".

La valeur par défaut est false, sauf que git-clone(1) ou git-init(1) vérifieront et mettront core.ignorecase à true si nécessaire lorsque le référentiel est créé.

Plus de détails dans cette réponse à Changement de la capitalisation des noms de fichiers dans Git .

90 votes

C'est la bonne réponse. Pour le futur moi, utilisez git config --unset-all core.ignorecase && git config --system core.ignorecase false avec sudo.

1 votes

@Znarkus Sous OS X, votre code était EXACTEMENT ce dont j'avais besoin. Je vous remercie !

3 votes

Idem pour James, @Znarkus a identifié le correctif pour ce problème sur OS X, Merci !

78voto

Adam Dymitruk Points 34999

Cela sera perçu comme 2 choses différentes mais vous causera des problèmes sur un système non sensible à la casse. Si c'est le cas, assurez-vous que vous complétez par des tabulations tous les chemins ou noms de fichiers. De plus, pour changer le nom d'un élément dans la casse uniquement, procédez comme suit :

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

Il s'agit d'une manière explicite de faire des changements, de les commiter, puis de fusionner les commits. Une façon plus courte de le faire est de manipuler l'index et le dossier de travail en une seule fois :

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

Ceci est également lié à l'ajustement des noms de répertoire : git mv et ne change que la casse du répertoire

0 votes

On dirait que c'était juste (sauf que je passais des majuscules aux minuscules)

0 votes

J'y ai jeté un coup d'oeil, tant que je suis habitué à cygwin, il est juste plus confortable d'utiliser cygwin - merci pour l'astuce.

0 votes

Vous pouvez juste faire git mv file.txt File.txt . Je ne sais pas si c'est une nouvelle fonctionnalité de git.

24voto

Arnoud Points 136

C'est beaucoup plus facile :

git mv Electronics electronics -f
git commit -m "That was easy!"

4 votes

Avez-vous essayé cela sur un système de fichiers insensible à la casse ?

2 votes

J'ai d'abord cru comprendre que l'auteur de l'article essayait de renommer un dossier, et non un fichier, en changeant la casse. Maintenant que je l'ai relu, ce n'est pas clair. En effet, mv -f fonctionnera pour un fichier.

24voto

Cemo Points 1243
git config --system core.ignorecase false

0voto

Jeroen Vannevel Points 18676

Dans mon scénario, j'avais deux dossiers tests y Tests qui se présentaient comme deux dossiers distincts dans Github mais un seul Tests dans Windows. Mon objectif était de combiner les deux dans tests .

J'ai utilisé l'approche suivante :

  1. Créer un nouveau dossier temp
  2. Copier tout le contenu de Tests a temp
  3. Supprimer Tests
  4. ejecutar git rm Tests -r
  5. Renommer temp a tests

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