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.
11 réponses
vous pouvez utiliser git mv :
git mv -f OldFileNameCase newfilenamecase
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 commeMakefile
.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
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.
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
enfile.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
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):
assurez-vous pour dire git il est maintenant sur un FS sensible à la casse:
git config core.ignorecase false
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
, 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):
-
git config core.ignorecase
(cela renvoie le paramètre courant, par exemplefalse
). -
git config core.ignorecase
<<true or false>>
- définir le nouveau réglage désiré. - ...Exécutez plusieurs autres commandes...
-
git config core.ignorecase
<<false or true>>
- ramenez la valeur de la configuration à son réglage précédent.
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:
- visite GitHub.com
- naviguez vers votre dépôt sur GitHub.com et sélectionnez la branche dans laquelle vous travaillez
- naviguez vers le fichier que vous avez l'intention de renommer en utilisant l'outil de navigation de fichier du site
- cliquez sur l'icône" Modifier ce fichier "(il ressemble à un crayon)
- Changer le nom de fichier dans le nom de fichier de saisie de texte
- Assurer "s'Engager directement à la
branchname
branche" bouton radio est sélectionné - cliquez sur le bouton" Commit changes
- Localement, la caisse/pull/récupère la branche
- fait
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:
-
git rm Foobar.java
- s'Engager avec un message que vous ne pouvez pas manquer
git commit -m 'TEMP COMMIT!!'
- Pull
- 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)
- Accepter votre changement qui est la 'suppression'
-
git rebase --continue
- maintenant laissez tomber votre contournement
git rebase -i HEAD~2
etdrop
leTEMP COMMIT!!
- Confirmer que le fichier est maintenant appelé
FooBar.java
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:
- supprimer tous les fichiers et dossiers non-git dans un autre dossier/dépôt.
- commit courant à vide git dossier (cela permettra de montrer que tous les fichiers supprimés.)
- ajouter tous les fichiers retour dans le dossier/dépôt git d'origine.
- 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é.
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.
- dans Utilitaire de disque, cliquez sur le bouton + tandis que le disque du conteneur est sélectionné
- sélectionnez APFS (Case-Sensitive) sous le format
- Nom
Sensitive
- à but Lucratif
- en option: Créer un dossier dans Sensitive appelé
git
etln -s /Volumes/Sensitive/git /Users/johndoe/git
votre lecteur sera dans /Volumes/Sensitive/
Comment puis-je commettre des changements de nom de fichier uniquement sensibles à la casse?