Je change la capitalisation d'un répertoire et Git ne semble pas le comprendre

139

Je développe un projet sur OS X Lion qui est sous contrôle de version Git. J'avais ces répertoires en minuscules et je les ai ensuite mis en majuscule (par exemple, emailaddresses => EmailAddresses), mais Git ne semble pas reconnaître le changement. Il pense toujours que les répertoires sont en minuscules lorsque je lance git ls-fileset d'autres commandes.

Est-ce inoffensif ou dois-je faire autre chose pour que Git prenne en compte ce changement?

dan
la source
Cela a créé de la confusion pour moi pendant 2 jours. Maintenant je comprends. Merci pour cette question
Number945

Réponses:

199

Vous utilisez probablement HFS + insensible à la casse (mais préservant la casse). Je travaille généralement autour de ceci comme ceci:

$ git mv somename tmpname
$ git mv tmpname SomeName
Paul R
la source
1
C'est le même problème que moi, et c'est ce que je fais.
fernferret
3
Eu le même problème avec l'outil Github pour Windows. Encore une fois, la solution ci-dessus fonctionne bien pour contourner le problème: renommer un fichier temporaire dans Windows Exploer, puis - après avoir validé - renommer le nom final avec la casse correcte.
Jason
9
Ou faites-le en une seule commande: git mv --force somename SomeName (de stackoverflow.com/a/16071375/217866 )
jackocnr
1
Pour que les modifications soient reflétées dans le dépôt distant, vous devez également le faire git push origin master. Si git refuse de mettre à jour la télécommande, vous devrez peut-être ajouter un fichier factice (par exemple touch stam) et faire le push. Suivi par une suppression ultérieure de stam et appuyez à nouveau.
Rahav
2
Une chose à noter est que vous devez être dans le dossier où se trouve le fichier pour que cela fonctionne. Ce n'était pas évident pour moi au début et j'ai continué à obtenir >>> mauvaise source, source = somename, destination = tmpname <<< parce que j'essayais d'exécuter la commande à partir de la racine du dépôt.
Parth Tamane
281

Vous pouvez dire à git de prendre en compte le cas en exécutant

git config core.ignorecase false

Taran
la source
4
Très bonne réponse si vous avez déjà changé les noms de fichiers sans utiliser git mv --force ou un autre script CL. Je vous remercie!
MeanMatt
4
C'est la meilleure réponse car je n'avais pas particulièrement envie de git mv'ing 200 fichiers renommés manuellement!
Adam Reis
1
A convenu que cela devrait être la meilleure réponse. Je vous remercie.
HomerPlata
1
pour une raison quelconque, il a dupliqué tous les fichiers, maintenant j'ai à la fois les versions originales et celles avec une majuscule changées ...
Salatiel
1
@Salatiel Je suppose que cela les duplique lorsque vous suivez déjà le fichier.
Iggy le
36

Comment git mv sur Mac en tenant compte de la casse

Cela se produit parce que Mac OS X implémente des fonctionnalités de préservation de la casse et d'insensibilité à la casse qui sont destinées à vous aider.

Bien que les suggestions de double renommage dans l'autre réponse fonctionnent, je recommande l'utilisation de '--force' pour un résultat de meilleure pratique:

$ git mv --force somename SomeName


Remarque: si vous essayez sans l'option force, git vous fera un mauvais coup comme ceci:

$ git mv somename SomeName
$ fatal: destination exists, source=somename, destination=SomeName

Dans l'exemple ci-dessus, la commande git échoue et aucun fichier n'est modifié dans le système de fichiers ou dans l'index de git.

David Manpearl
la source
Dès la première commande, j'obtiens fatal: not under version control.
2540625
Cette erreur fatale signifie que vous n'avez pas de référentiel GIT à cet emplacement. gitLes commandes ne fonctionnent que dans les répertoires avec des référentiels GIT.
David Manpearl
Mais j'étais dans un sous-répertoire de mon repo Git… En fin de compte, je l'ai résolu via la réponse de Taran , BTW. Merci.
2540625
19

Essayez de changer l'option git config core.ignorecase en false dans votre fichier .gitconfig.

pooamlairaj
la source
4
ou écrivezgit config core.ignorecase false
iforgotmypassword
2
@iforgotmypassword = vous auriez dû y répondre - j'aurais voté pour vous en fait
Abdeali Chandanwala
4

Les étapes suivantes m'ont aidé à résoudre le problème:

  1. Renommez le dossier en temp:

    mv Folder temp                  // It will rename your Folder to temp
    
  2. Stage et engagement:

    git add .
    git commit -m "Temp"
    
  3. Renommez le tempdossier selon votre choix:

    mv temp folder        // It will rename temp folder to the name of your choice(folder)
    git add .
    git commit -m "Folder Fixed"
    

Terminé - Vous pouvez maintenant pousser.

Renil Babu
la source
1

Si vous faites git mv AAA aaaou git mv -f AAA aaa, cela ne fonctionnera pas et vous aurez une erreur fatal: renaming 'AAA' failed: Invalid argument.

Parce que AAAet aaasont UN MÊME dossier / fichier sur des systèmes de fichiers insensibles à la casse, déplacer AAAvers aaasignifie déplacer AAAcomme aaa/AAA.

Alors tu devrais faire

git mv AAA aaa.1
git mv aaa.1 aaa

J'espère que cela vous sera utile.

Gapur Kassym
la source
1

La raison en est que le système d'exploitation basé sur LINUX ou macOS ignore la casse pour le nom de fichier / dossier. Nous devons résoudre ce problème en suivant les étapes ci-dessous

For Exp, you want to change folder name from Base to base
1. mv Base base2
2. git add . && git commit -m "Fix folder name problem (wip)"
3. mv base2 base
4. git add . && git commit -m "Fixed folder name problem"
Giapnh
la source
0

Aucune de ces solutions n'a fonctionné pour moi. SourceTree créait toujours ma branche avec un cas différent de ce que je voulais. Alors, comment j'ai résolu le problème:

1 - Regardez vos fichiers git sur finder. Vous pouvez le faire en tapant ceci sur le terminal:

- `defaults write com.apple.finder AppleShowAllFiles TRUE`
- `killall Finder`

2 - Relancez le finder et accédez au répertoire de votre projet

3 - Maintenant, changez simplement le nom de votre dossier, disons d'une fonctionnalité à l'autre. Et voilà.

Bruno Cunha
la source
0

J'ai eu le même problème et j'utilise la solution ci-dessous. J'utilise ceci pour renommer des lots, des répertoires et des fichiers, etc.:

git rm -r --cached .
git add --all .
git commit -a -m "Versioning updated directory/file names"
git push origin master

Comme détaillé ici.

Roger
la source
0

Aucun de ceux-ci ne m'a vraiment aidé, je me demandais toujours de cacher mes modifications, car ma situation était que mon dossier local était en majuscule mais pas la télécommande, et ma branche était en retard et je ne pouvais plus tirer à cause des différences de capitalisation des fichiers dans la structure des dossiers.

La seule façon de résoudre ce problème était de supprimer ma succursale locale et de vérifier la télécommande.

Snickers3192
la source