279 votes

git mv et seulement changer cas du répertoire

Alors que je trouve semblable question, je n'ai pas trouver de réponse à mon problème

Quand j'ai essayer de renommer le répertoire de FOO foo via git mv FOO foo - je obtenir

fatal: renaming 'FOO' failed: Invalid argument

OK. Donc, j'essaie git mv FOO foo2 && git mv foo2 foo

Mais lorsque je tente de commettre via git commit . - je obtenir

# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)

Lorsque j'ajoute le répertoire via git add foo rien ne change et git commit . me donne le même message.

Ce que je fais mal? J'ai pensé que je suis en utilisant un casse système (OSX) pourquoi ne puis-je pas simplement renommer le répertoire?

438voto

Adam Dymitruk Points 34999

Vous êtes dans une casse de l'environnement. Plus loin, en ajoutant à l'-Une volonté de ne pas prendre soin de l'enlever côté de la mv que Git le comprend. Avertissement! S'assurer qu'aucune autre modification ou sans traces de fichiers sont autour de quand vous faites cela ou ils vont avoir commis dans le cadre de ce changement! git stash -u d'abord, puis git stash pop après. Continue: Pour contourner ce problème, procédez de la manière suivante:

mv foo foo2
git add -A
git commit -m "renaming"
mv foo2 FOO
git add -A
git commit --amend -m "renamed foo to FOO"

C'est l'tirés façon de changer le répertoire de travail, de commettre puis en rabattant les 2 s'engage. Vous pouvez simplement déplacer le fichier dans l'index, mais pour quelqu'un qui est nouveau pour git, il peut ne pas être assez explicite sur ce qui se passe. La version courte est

git mv foo foo2
git mv foo2 FOO
git commit -m "changed case of dir"

Comme suggéré dans un des commentaires, vous pouvez également faire un rebase interactif (git rebase -i HEAD~5 si la mauvaise affaire a été introduit il y a 5 validations) pour résoudre le cas et pas dans le mauvais cas apparaître n'importe où dans l'histoire. Vous devez être prudent si vous faites cela, comme la validation des hachages à partir de là, différents, et d'autres devront rebase ou re-fusionner leur travail avec ce passé récent de la branche.

ceci est lié à la correction du nom d'un fichier: git Est pas sensible à la casse?

150voto

mipadi Points 135410

Vous voulez définir l'option core.ignorecase sur false, ce qui permet à Git de faire attention aux cas sur les systèmes de fichiers qui ne le supportent pas nativement. Pour activer dans votre repo:

 $ git config core.ignorecase false
 

Ensuite, vous pouvez renommer le fichier avec git mv et cela fonctionnera comme prévu.

77voto

mgadda Points 659

J'ai été capable de résoudre ceci, en utilisant git 1.7.7 comme suit:

 $ git mv improper_Case improve_case2
$ git mv improve_case2 improve_case
$ git commit -m "<your message>"
 

Apparemment, l'exigence d'amélioration de 6 caractères imposée par StackOverflow n'aide pas à corriger de petites erreurs.

15voto

wizonesolutions Points 134

(git mv-variante libre.)

J'ai rencontré ce problème dans Git sous Mac OS X 10.9. Je l'ai résolu comme suit:

git rm -r --cached /path/to/directory

Qui organise le répertoire pour la suppression dans Git mais ne fait pas de supprimer tout les fichiers physiques (--cached). Cela rend également le répertoire, maintenant, avec la bonne affaire, sans traces dans les fichiers.

Ainsi, vous pouvez faire ceci:

mv /path/to/directory /path/to/DIRECTORY
git add -A /path/to/DIRECTORY

Git reconnaîtra alors que vous avez renommé les fichiers, et lorsque vous n' git status vous devriez voir un certain nombre de renamed: des lignes. Inspecter et de s'assurer qu'ils semblent corrects, et si oui, vous pouvez valider les modifications normalement.

9voto

Chase T. Points 915

Forcer avec l'option -f:

 git mv -f FOO foo
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X