web-dev-qa-db-fra.com

Comment valider uniquement les modifications de nom de fichier sensibles à la casse dans Git?

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

1090
Gil Shulman

Vous pouvez utiliser git mv :

git mv -f OldFileNameCase newfilenamecase
1302
Keith Smiley

Git a un paramètre de configuration qui lui indique s'il doit être sensible à la casse ou non: core.ignorecase. Pour indiquer à Git qu'il est sensible à la casse, définissez simplement ce paramètre sur false:

git config core.ignorecase false

Documentation

À partir de la git config documentation :

core.ignorecase

Si la valeur est true, cette option active diverses solutions permettant à git de mieux fonctionner sur des systèmes de fichiers ne respectant pas la casse, comme FAT. Par exemple, si une liste de répertoires trouve makefile lorsque git s'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 que git-clone (1) ou git-init (1) sondera et définira core.ignorecase true si cela est approprié lors de la création du référentiel. .

Systèmes de fichiers insensibles à la casse

Les deux systèmes d’exploitation les plus répandus dont je connais les systèmes de fichiers respectant la casse sont:

  • Les fenêtres
  • OS X
869
user456814

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

  1. RenommerFILE.ext en whatever.ext
  2. Stage ce fichier
  3. Maintenant renommerwhatever.ext en file.ext
  4. Stage ce fichier à nouveau

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

118
CBarr

Voici 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 une erreur "le fichier existe". Peut-être que cela peut être fait en une étape en ajoutant --cached ou tel.

112
Sijmen Mulder

Sous OSX, pour éviter ce problème et éviter d’autres problèmes de développement sur un système de fichiers ne respectant pas la casse, vous pouvez utiliser Utilitaire de disque pour créer un cas sensible lecteur virtuel/image disque.

Exécutez l'utilitaire de disque, créez une nouvelle image de disque et utilisez les paramètres suivants (ou modifiez-les à votre guise, tout en respectant la casse):

Mac Disk Utility Screenshot

Assurez-vous de dire à git qu'il s'agit maintenant d'un système de fichiers sensible à la casse:

git config core.ignorecase false
42
user1821510

Il peut parfois être utile de temporairement changer la sensibilité de Git à la casse. Deux méthodes possibles: -

Méthode 1 (modification de la sensibilité à la casse pour une seule commande) :

_git -c core.ignorecase=true checkout mybranch_ pour désactiver la sensibilité à la casse pour une seule commande checkout. Ou plus généralement: _git -c core.ignorecase=_ <<true or false>><<command>> . (Nous remercions VonC de l'avoir suggéré dans les commentaires.)

Méthode 2 (modification de la sensibilité à la casse pour plusieurs commandes) :

Pour modifier le paramètre plus longtemps (par exemple, si plusieurs commandes doivent être exécutées avant de le rétablir):

  1. _git config core.ignorecase_ (cela retourne le paramètre actuel, par exemple false).
  2. _git config core.ignorecase_ <<true or false>> - définissez le nouveau paramètre souhaité.
  3. ... Exécuter plusieurs autres commandes ...
  4. _git config core.ignorecase_ <<false or true>> - remet la valeur de configuration à son réglage précédent.
32
Steve Chambers

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

2) valider le fichier supprimé Name.jpg

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

4) ajouter le fichier name.jpg au dernier commit

git add
git commit --amend
16
razon

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

Si votre référentiel est hébergé à distance (GitHub, GitLab, BitBucket), vous pouvez renommer le fichier sur Origin (GitHub.com) et le forcer à le renommer de manière descendante.

Les instructions ci-dessous se rapportent à GitHub, mais l’idée générale qui les sous-tend devrait s’appliquer à n’importe quelle plate-forme d’hébergement de référentiels à distance. N'oubliez pas que le type de fichier que vous essayez de renommer est important, qu'il s'agisse d'un type de fichier que GitHub considère comme éditable (code, texte, etc.) ou non (image, binaire, etc.) dans le navigateur.

  1. Visitez GitHub.com
  2. Accédez à votre référentiel sur GitHub.com et sélectionnez la branche dans laquelle vous travaillez.
  3. À l'aide de l'outil de navigation de fichier du site, accédez au fichier que vous souhaitez renommer.
  4. GitHub vous permet-il d’éditer le fichier dans le navigateur?
    • a.) Editable
      1. Cliquez sur l'icône "Modifier ce fichier" (elle ressemble à un crayon)
      2. Changer le nom du fichier dans l'entrée de texte du nom du fichier
    • b.) Non éditable
      1. Ouvrez le bouton "Télécharger" dans un nouvel onglet et enregistrez le fichier sur votre ordinateur.
      2. Renommez le fichier téléchargé
      3. Dans l'onglet précédent sur GitHub.com, cliquez sur l'icône "Supprimer ce fichier" (elle ressemble à une corbeille).
      4. Assurez-vous que le bouton radio "Valider directement dans la branche branchname" est sélectionné et cliquez sur le bouton "Valider les modifications".
      5. Dans le même répertoire sur GitHub.com, cliquez sur le bouton "Télécharger les fichiers".
      6. Téléchargez le fichier renommé à partir de votre ordinateur
  5. Assurez-vous que le bouton radio "Valider directement dans la branche branchname" est sélectionné et cliquez sur le bouton "Valider les modifications".
  6. Localement, checkout/chercher/tirer la branche
  7. Terminé
15
gmeben

Semblable à la réponse de @ Sijmen, c’est ce qui a fonctionné pour moi sur OSX lorsque renomme un répertoire (inspiré par this réponse d’un autre poster):

git mv CSS CSS2
git mv CSS2 css

Faire simplement git mv CSS css a donné l'erreur d'argument invalide: fatal: renaming '/static/CSS' failed: Invalid argument peut-être parce que le système de fichiers d'OSX est insensible à la casse

p.s BTW si vous utilisez Django, collectstatic ne reconnaîtrait pas non plus la différence de casse et vous devrez faire ce qui précède, manuellement, dans le répertoire racine statique également

7
Anupam

J'ai utilisé ces é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

6
andrewvergel

Mac OSX High Sierra 10.13 corrige cela quelque peu. Créez simplement une partition APFS virtuelle pour vos projets git. Par défaut, elle n’a aucune limite de taille et ne prend pas d’espace.

  1. Dans Utilitaire de disque, cliquez sur le bouton + lorsque le disque conteneur est sélectionné.
  2. Sélectionnez APFS (sensible à la casse) sous format
  3. Nommez-le Sensitive
  4. Profit
  5. Facultatif: Créez 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 valider uniquement les modifications de nom de fichier sensibles à la casse dans Git?

5
Ray Foss

J'ai fait face à ce problème plusieurs fois sur MacOS. Git est sensible à la casse, mais Mac ne conserve que la casse.

Quelqu'un valide un fichier: Foobar.Java et décide de le renommer au bout de quelques jours en FooBar.Java. Lorsque vous extrayez le dernier code, il échoue avec The following untracked working tree files would be overwritten by checkout...

Le seul moyen fiable que j'ai vu de corriger cela est:

  1. git rm Foobar.Java
  2. Envoyez-le avec un message que vous ne pouvez pas rater git commit -m 'TEMP COMMIT!!'
  3. Tirer
  4. Cela fera apparaître un conflit vous obligeant à fusionner le conflit - parce que votre modification l'a supprimé, mais l'autre modification a été renommée (d'où le problème) [[.____].
    1. Acceptez votre changement qui est la "suppression"
    2. git rebase --continue
  5. Maintenant, supprimez votre solution de contournement git rebase -i HEAD~2 et drop le TEMP COMMIT!!
  6. Confirmez que le fichier s'appelle maintenant FooBar.Java
3
Ashwin Jayaprakash

Lorsque vous avez renommé de nombreux fichiers et que certains ne sont que des changements de boîtier, il est difficile de vous rappeler lequel. manuellement "déplacer" le fichier peut être un travail fastidieux. Donc, ce que je ferais pendant mes tâches de changement de nom de fichier est:

  1. supprimez tous les fichiers non git et les dossiers dans un dossier/référentiel différent.
  2. valider le dossier git vide actuel (cela montrera que tous les fichiers ont été supprimés.)
  3. ajoutez tous les fichiers dans le dossier/référentiel git d'origine.
  4. valider le dossier git actuel non vide.

Cela résoudra tous les problèmes sans chercher à savoir quels fichiers ou dossiers vous avez renommés.

2

Si rien ne fonctionne, utilisez git rm filename pour supprimer le fichier du disque et le rajouter.

0
gopal Pandey