web-dev-qa-db-fra.com

Git n'est-il pas sensible à la casse?

Dans le premier engagement de mon partiel appelé _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 avoir validé le nouveau nom, j'ai donc changé le nom à la main dans le référentiel cible.

Maintenant, il change parfois le partiel _electronics Validé en _Electronics.

Qu'est ce que j'ai mal fait?

84
JAkk

Il sera considéré comme 2 choses différentes mais vous posera des problèmes sur un système non sensible à la casse. Si tel est le cas, assurez-vous que vous complétez par tabulation tous les chemins ou noms de fichier. De plus, pour changer le nom de quelque chose dans le cas, 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'un moyen explicite d'apporter des modifications en les validant, puis de réduire les validations. Une façon plus courte de le faire est de manipuler l'index et le dossier de travail tout en un:

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

68
Adam Dymitruk

Cela dépendra du core.ignorecase valeur de configuration, définie sur false dans les systèmes de fichiers sensibles à la casse et sur true dans msysgit sous Windows.

core.ignorecase

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

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

97
manojlds

C'est beaucoup plus facile:

git mv Electronics electronics -f
git commit -m "That was easy!"
22
Arnoud
git config --system core.ignorecase false
20
Cemo

Dans mon scénario, j'avais deux dossiers tests et Tests qui montraient deux dossiers distincts dans Github mais un seul dossier Tests dans Windows. Mon objectif était de les combiner en tests.

J'ai utilisé l'approche suivante:

  1. Créez un nouveau dossier temp
  2. Copiez tout le contenu de Tests vers temp
  3. Supprimer Tests
  4. exécuter git rm Tests -r
  5. Renommez temp en tests
0
Jeroen Vannevel