Bien que j'ai trouvé une question similaire, je n'ai pas trouvé de réponse à mon problème
Lorsque j'essaie de renommer le répertoire de FOO en foo via git mv FOO foo
j'obtiens
fatal: renaming 'FOO' failed: Invalid argument
D'ACCORD. Alors j'essayegit mv FOO foo2 && git mv foo2 foo
Mais quand j'essaye de m'engager via git commit .
j'obtiens
# 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 redonne le même message.
Qu'est-ce que je fais mal? Je pensais que j'utilisais un système sensible à la casse (OSX), pourquoi ne puis-je pas simplement renommer le répertoire?
macos
git
version-control
case-sensitive
oschrenk
la source
la source
git mv
fonctionne.git mv foo Foo
si vous utilisez un shell cygwin.Réponses:
Vous êtes dans un environnement insensible à la casse. De plus, l'ajout sans le
-A
ne prendra pas en charge le côté supprimer dumv
Git. Avertissement! Assurez-vous qu'aucune autre modification ni aucun fichier non suivi ne sont présents lorsque vous effectuez cette opération, sinon ils seront validés dans le cadre de cette modification!git stash -u
d'abord, faites cela et ensuitegit stash pop
. Continuer: Pour contourner ce problème, procédez comme suit:C'est la manière longue de changer le répertoire de travail, de valider puis de réduire les 2 validations. Vous pouvez simplement déplacer le fichier dans l'index, mais pour quelqu'un qui est nouveau dans git, il peut ne pas être suffisamment explicite sur ce qui se passe. La version plus courte est
Comme suggéré dans l'un des commentaires, vous pouvez également effectuer un rebase interactif (
git rebase -i HEAD~5
si le mauvais cas a été introduit il y a 5 commits) pour y remédier et ne pas faire apparaître le mauvais cas n'importe où dans l'historique. Vous devez être prudent si vous le faites car les hachages de validation à partir de ce moment seront différents et les autres devront rebaser ou fusionner leur travail avec le passé récent de la branche.Ceci est lié à la correction du nom d'un fichier: git n'est-il pas sensible à la casse?
la source
git add foo2
.-A
s'occupe des deux. Vice versa pour la première étape. J'ajouterai l'avertissement. Merci!git rebase -i HEAD~2
. Remarque: Pour simplifier cela, définissez le message final dans votre premier commit et corrigez le second.Vous voulez définir l'option
core.ignorecase
sur false, ce qui obligera Git à faire attention à la casse sur les systèmes de fichiers qui ne le supportent pas nativement. Pour activer dans votre référentiel:Ensuite, vous pouvez renommer le fichier avec
git mv
et cela fonctionnera comme prévu.la source
I modified a file that doesn't exist
.. hrmerror: The following untracked working tree files would be overwritten by checkout:
mais ... ces fichiers n'existent pas.J'ai pu résoudre ce problème en utilisant git 1.7.7 en utilisant un nom de fichier temporaire:
la source
(
git mv
-sans variante.)J'ai rencontré ce problème dans Git sur Mac OS X 10.9. Je l'ai résolu comme suit:
git rm -r --cached /path/to/directory
Cela met en scène le répertoire à supprimer dans Git mais ne supprime en fait aucun fichier physique (
--cached
). Cela fait également apparaître le répertoire, maintenant avec le cas approprié, dans les fichiers non suivis.Vous pouvez donc faire ceci:
Git reconnaîtra alors que vous avez renommé les fichiers, et lorsque vous le faites,
git status
vous devriez voir un certain nombre derenamed:
lignes. Inspectez-les et assurez-vous qu'ils semblent corrects. Si tel est le cas, vous pouvez valider les modifications normalement.la source
mv
commande ne fonctionnait pas pour renommer le répertoire; J'ai dû le renommer dans Finder. En dehors de cela, ce correctif fonctionne parfaitement.Il s'agit d'une solution rapide et sans bug:
Avertissement! Renommez toujours tous les fichiers du dossier renommé (utilisez
/*
).Ne renommez pas de fichiers uniques. Cela conduit à un bogue, décrit dans cette réponse .
Si vous voulez d'abord voir le résultat en premier, utilisez
-n
:Après avoir fait un
mv
:Maintenant, Git aurait dû renommer le dossier LES DEUX dans ses fichiers internes et dans le système de fichiers.
la source
Forcer avec l'option -f:
la source
false
, cela a fonctionné pour moiJ'avais un problème connexe.
Un dossier nommé «Pro» (créé en premier) et un autre «pro» (créé par erreur). Sous Mac, c'est la même chose, mais différent selon git.
la configuration git renommait les fichiers dans le bon dossier (merci), et créait également des fichiers fantômes dans 'pro' (Non !!). Je ne pouvais pas ajouter de modifications de fichiers fantômes à la piste et je ne pouvais pas vérifier d'autres branches à moins de transporter ces fichiers avec moi, et je ne pouvais pas non plus le réinitialiser d'une manière ou d'une autre.
Au lieu de cela, je l'ai fait
Pour le rendre plus sûr, je l'ai fait dans une branche fixe séparée, puis j'ai fusionné pour revenir à la branche principale
Pour le problème de fichier fantôme créé par, n'importe quel gourou peut-il expliquer comment et pourquoi? Merci d'avance.
la source
Vous n'utilisez pas un système de fichiers sensible à la casse dans OS X, sauf si vous l'avez choisi explicitement. HFS + peut être sensible à la casse, mais la valeur par défaut est insensible à la casse.
la source
Voici une solution très simple autour de tous les gitfoo de cette page.
la source
Améliorer la réponse d'Adam Dymitruk (idiot que SO ne me laisse pas commenter sa réponse), utiliser "git mv" mettra automatiquement en scène exactement les fichiers déplacés. Aucun stockage n'est nécessaire et le "git add -A" risqué peut être évité:
la source
Cela a très bien fonctionné pour moi sur Windows. PowerShell utilisé avec les éléments suivants:
mv .\Folder-With-Wrong-Casing .\temp
git add -A
git commit -m "renamed folder with wrong casing to temp"
mv .\temp .\Folder-with-Correct-Casing
git add -A
git commit --amend -m "Renamed to proper casing"
git push
Merci à la réponse d'Adam ci-dessus.
la source