Bien que j'ai trouvé similaire question Je n'ai pas trouvé de réponse à mon problème
Quand j'essaie de renommer le répertoire de FOO à foo via git mv FOO foo
Je reçois
fatal: renaming 'FOO' failed: Invalid argument
D'ACCORD. Alors j'essaie git mv FOO foo2 && git mv foo2 foo
Mais quand j'essaye de commettre via git commit .
Je reçois
# 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)
Quand j'ajoute le répertoire via git add foo
rien ne change et git commit .
me donne à nouveau le même message.
Qu'est-ce que je fais mal? Je pensais utiliser un système sensible à la casse (OSX), pourquoi ne puis-je pas simplement renommer le répertoire?
Vous êtes dans un environnement insensible à la casse. En outre, en ajoutant avec le -A
ne prendra pas soin du côté supposé du mv
tel que Git le comprend. Attention! Assurez-vous qu’il n’ya pas d’autres modifications ni de fichiers non suivis dans votre disque, sinon ils seront validés dans le cadre de ce changement! git stash -u
d'abord, faites ceci et ensuite git stash pop
après. Continuant: Pour résoudre ce problème, procédez comme suit:
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 le moyen le plus simple de changer le répertoire de travail, de valider et ensuite de réduire les 2 commits. Vous pouvez simplement déplacer le fichier dans l'index, mais pour une personne novice dans git, cela peut ne pas être assez explicite quant à 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 l'un des commentaires, vous pouvez également faire une rebase interactive (git rebase -i HEAD~5
si le mauvais cas a été introduit il y a 5 jours) pour y remédier sans que le mauvais cas n'apparaisse nulle part dans l'historique. Vous devez faire attention si vous faites cela, car les hachages de validation seront différents et les autres devront rebaser ou fusionner leur travail avec ce passé récent de la branche.
Ceci est lié à la correction du nom d'un fichier: git n'est-il pas sensible à la casse?
Vous voulez définir l'option core.ignorecase
to false, ce qui obligera Git à prêter attention aux cas sur les systèmes de fichiers qui ne le prennent pas en charge de manière native. Pour activer dans votre repo:
$ git config core.ignorecase false
Ensuite, vous pouvez renommer le fichier avec git mv
et ça fonctionnera comme prévu.
J'ai pu résoudre ce problème en utilisant git 1.7.7 en utilisant un nom de fichier temporaire:
$ git mv improper_Case improve_case2
$ git mv improve_case2 improve_case
$ git commit -m "<your message>"
(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
Cela met le répertoire en attente de suppression dans Git mais ne supprime pas réellement les fichiers physiques (--cached
). Cela rend également le répertoire, maintenant avec le cas approprié, affiché dans des fichiers non suivis.
Donc, vous pouvez faire ceci:
mv /path/to/directory /path/to/DIRECTORY
git add -A /path/to/DIRECTORY
Git reconnaîtra par la suite que vous avez renommé les fichiers et que git status
vous devriez voir un certain nombre de renamed:
lignes. Inspectez-les et assurez-vous qu'ils ont l'air corrects et, le cas échéant, vous pouvez valider les modifications normalement.
Forcer avec l'option -f:
git mv -f FOO foo
git mv -f path/to/foo/* path/to/FOO/
/*
).Ne renommez pas un seul fichier. Cela conduit à un bogue, décrit dans ce réponse .
Si vous voulez d’abord voir le résultat, utilisez -n
:
git mv -f -n path/to/foo/* path/to/FOO/
Après avoir créé un mv
:
Maintenant, Git aurait dû renommer le dossier BOTH dans ses fichiers internes et dans son système de fichiers.
Vous n'utilisez pas de système de fichiers sensible à la casse dans OS X, à moins que vous ne le choisissiez explicitement. HFS + can doit être sensible à la casse, mais la valeur par défaut est insensible à la casse.
J'ai eu 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.
$ git config core.ignorecase false
git config a renommé les fichiers dans le bon dossier (merci) et a également créé 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.
Au lieu de cela, j'ai fait
$ git rm -r --cached pro
$ git status // => pro files removed, new Pro files untracked
$ git add Pro
Pour plus de sécurité, je l’ai fait dans une branche de correctif séparée, puis j’ai fusionné avec la branche principale.
Pour le problème de fichier fantôme créé par, tout guru peut-il expliquer comment et pourquoi? Merci d'avance.
Voici une solution très simple autour de tout le gitfoo sur cette page.
Améliorer la réponse d'Adam Dymitruk (idiot que SO ne me laisse pas commenter sa réponse), utiliser "git mv" organisera automatiquement les fichiers déplacés. Aucun stockage n'est nécessaire et le risque "git add" -A "peut être évité:
old="abc"; new="ABC";
tmp="$old-renamed";
git mv "$old" "$tmp";
git commit -m "Renamed '$old' to '$tmp'.";
git mv "$tmp" "$new";
git commit --amend -m "Renamed '$old' to '$new'.";