Comment puis-je commettre des changements de nom de fichier uniquement sensibles à la casse dans Git?

j'ai changé le nom de quelques fichiers par dé-capitaliser la première lettre, comme dans Name.jpg en name.jpg . Git ne reconnaît pas cela change et j'ai dû supprimer les fichiers et les télécharger à nouveau. Y a-t-il un moyen que Git puisse être sensible à la casse lors de la vérification des changements dans les noms de fichiers? Je n'ai apporté aucun changement au fichier lui-même.

871
demandé sur Gil Shulman 2013-07-16 21:41:45

11 réponses

vous pouvez utiliser git mv :

git mv -f OldFileNameCase newfilenamecase
1093
répondu Keith Smiley 2016-06-23 14:18:56

Git a un paramètre de configuration qui lui indique s'il doit être sensible à la casse ou insensible: core.ignorecase . Pour dire à Git d'être case-senstive, il suffit de mettre ce paramètre à false :

git config core.ignorecase false

Documentation

De la git config documentation :

core.ignorecase

si elle est vraie, cette option permet d'activer diverses solutions git fonctionne mieux sur les systèmes de fichiers qui ne sont pas sensibles à la casse, comme les matières GRASSES. Par exemple , si une liste de répertoires trouve makefile alors que git s'attend à Makefile , git supposera qu'il s'agit en fait du même fichier, et continuera de s'en souvenir comme Makefile .

La valeur par défaut est false, sauf git-clone(1) ou git-init(1) sera de la sonde et de l'ensemble core.ignorecase true si 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 que je connais sont

  • Windows
  • OS X
705
répondu 2014-07-31 03:23:15

C'est ce que J'ai fait sur OS X:

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

deux étapes parce que sinon j'ai eu une erreur" file exists". Peut-être peut-on le faire en une seule étape en ajoutant --cached ou autre.

87
répondu Sijmen Mulder 2013-11-13 14:27:25

en utilisant SourceTree j'ai pu faire tout cela à partir de L'UI

  • Renommer FILE.ext à whatever.ext
  • Stade que le fichier
  • maintenant renommer whatever.ext en file.ext
  • Scène à nouveau ce fichier

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

73
répondu Chris Barr 2016-10-28 14:40:00

sous OSX, pour éviter ce problème et éviter d'autres problèmes avec le développement sur un système de fichier insensible à la casse, vous pouvez utiliser L'utilitaire de disque pour créer une valise sensible disque virtuel / image de disque.

Lancez utilitaire de disque, créez une nouvelle image de disque, et utilisez les paramètres suivants (ou changez comme vous voulez, mais gardez-le sensible à la casse):

Mac Disk Utility Screenshot

assurez-vous pour dire git il est maintenant sur un FS sensible à la casse:

git config core.ignorecase false
35
répondu user1821510 2014-10-03 20:20:51

1) renommer le fichier Name.jpg en name1.jpg

2) s'engager supprimé le fichier Name.jpg

3) Renommer le fichier name1.jpg en name.jpg

4) ammend a ajouté le fichier name.jpg à la propagation précédente 151980920"

git add
git commit --amend
14
répondu razon 2016-10-03 19:13:25

, Il peut parfois être utile de temporairement changement Git est affaire de sensibilité. Deux méthodes possibles: -

Méthode 1:

git -c core.ignorecase=true checkout mybranch pour désactiver la case-sensitivity pour une seule commande checkout . Ou plus généralement: git -c core.ignorecase= <<true or false>> <<command>> . (crédit à VonC pour avoir suggéré ceci dans les commentaires.)

Méthode 2:

pour modifier le réglage pour plus longtemps (par exemple si plusieurs commandes doivent être exécutées avant de le changer en arrière):

  1. git config core.ignorecase (cela renvoie le paramètre courant, par exemple false ).
  2. git config core.ignorecase <<true or false>> - définir le nouveau réglage désiré.
  3. ...Exécutez plusieurs autres commandes...
  4. git config core.ignorecase <<false or true>> - ramenez la valeur de la configuration à son réglage précédent.
8
répondu Steve Chambers 2018-08-28 13:54:38

j'ai essayé les solutions suivantes des autres réponses et elles n'ont pas fonctionné:

si votre dépôt est hébergé sur GitHub comme le mien est, vous pouvez renommer le fichier sur origin (GitHub.com) et forcez le fichier à changer de nom de manière descendante. Voici ce que j'ai fait:

  1. visite GitHub.com
  2. naviguez vers votre dépôt sur GitHub.com et sélectionnez la branche dans laquelle vous travaillez
  3. naviguez vers le fichier que vous avez l'intention de renommer en utilisant l'outil de navigation de fichier du site
  4. cliquez sur l'icône" Modifier ce fichier "(il ressemble à un crayon)
  5. Changer le nom de fichier dans le nom de fichier de saisie de texte
  6. Assurer "s'Engager directement à la branchname branche" bouton radio est sélectionné
  7. cliquez sur le bouton" Commit changes
  8. Localement, la caisse/pull/récupère la branche
  9. fait
5
répondu gmeben 2018-06-01 11:32:46

j'ai affronté ce problème plusieurs fois sur MacOS. Git est sensible à la casse, mais Mac ne conserve que la casse.

Quelqu'un de commettre un fichier: Foobar.java et après quelques jours, décide de le renommer FooBar.java . Quand vous tirez le dernier code il échoue avec The following untracked working tree files would be overwritten by checkout...

la seule façon fiable que j'ai vu qui corrige ceci est:

  1. git rm Foobar.java
  2. s'Engager avec un message que vous ne pouvez pas manquer git commit -m 'TEMP COMMIT!!'
  3. Pull
  4. Cela fait apparaître un conflit de vous forcer à fusionner les conflits parce que votre changement supprimé, mais l'autre changement renommé (d'où le problème)
    1. Accepter votre changement qui est la 'suppression'
    2. git rebase --continue
  5. maintenant laissez tomber votre contournement git rebase -i HEAD~2 et drop le TEMP COMMIT!!
  6. Confirmer que le fichier est maintenant appelé FooBar.java
3
répondu Ashwin Jayaprakash 2016-08-18 21:06:23

quand vous avez fait beaucoup de renommage de fichier et que certains d'entre eux sont juste un changement de douille, il est difficile de se rappeler lequel est lequel. manuellement "git déplacer" le fichier peut être tout à fait un travail. Donc ce que je ferais pendant mes tâches de changement de nom de fichier est:

  1. supprimer tous les fichiers et dossiers non-git dans un autre dossier/dépôt.
  2. commit courant à vide git dossier (cela permettra de montrer que tous les fichiers supprimés.)
  3. ajouter tous les fichiers retour dans le dossier/dépôt git d'origine.
  4. commit courant non-vide git dossier.

cela va résoudre tous les problèmes de cas sans essayer de comprendre quels fichiers ou dossiers vous avez renommé.

2
répondu Ricardo Virtudazo Jr 2017-04-29 11:00:41

Mac OSX High Sierra 10.13 Corriges this somewhat. Il suffit de créer une partition APFS virtuelle pour vos projets git, par défaut elle n'a pas de limite de taille et ne prend pas d'espace.

  1. dans Utilitaire de disque, cliquez sur le bouton + tandis que le disque du conteneur est sélectionné
  2. sélectionnez APFS (Case-Sensitive) sous le format
  3. Nom Sensitive
  4. à but Lucratif
  5. en option: Créer un dossier dans Sensitive appelé git et ln -s /Volumes/Sensitive/git /Users/johndoe/git

votre lecteur sera dans /Volumes/Sensitive/

enter image description here

Comment puis-je commettre des changements de nom de fichier uniquement sensibles à la casse?

2
répondu Ray Foss 2018-08-08 21:32:25