Il y a quelques fichiers dans notre base de code contrôlée par git que je voudrais renommer. Plus précisément, je veux juste changer la casse du fichier, ce qui sourceCode.java
devient SourceCode.java
, par exemple. Le hic: je suis sur une boîte Windows et le système de fichiers pense qu'il s'agit du même nom de fichier.
Comment puis-je faire en sorte que Windows et Git reconnaissent ce changement et l'enregistrent?
git mv
devrait fonctionner ( stackoverflow.com/a/24979063/6309 ). Même sous Windows.Réponses:
Jetez un œil ici pour plus de conseils sur la façon de le faire:
Comment faire git ignorer les changements au cas où?
Ou:
la source
git add
de ce dossier nouvellement renommé, NE PAS COMMITER, changer le nom du dossier en ce qu'il devrait être. ,git add
puis recommencez.Get-ChildItem '.' | Rename-Item {$_.Name.ToLowerCase()}
Si vous utilisez un système de fichiers FAT, votre seul choix est de renommer en deux étapes:
sourceCode.java
enanything.you.like
anything.you.like
enSourceCode.java
À l'époque où nous utilisions Perforce, nous avions exactement ce problème et c'était la seule solution que nous pouvions trouver.
la source
Les étapes suivantes m'ont permis de changer le cas sous Windows:
ignorecase = false
à[core]
en.git/config
;ignorecase = false
ajouté à la première étape.De cette façon, vous avez un seul commit qui contient le renommage et il est facile de changer par exemple un répertoire entier.
la source
Faites attention. Cela peut entraîner des modifications impossibles à fusionner. Git est confus lors de la fusion sous Windows car il ne peut pas décider si l'ancien nom en majuscules et le nouveau nom en minuscules sont le même fichier ou non (pour Git ils ne le sont pas, mais pour le système de fichiers qu'ils sont). Pour fusionner, vous devez effectuer une solution de contournement manuelle, comme la suppression des fichiers avant la fusion.
Voir problème de rebase Git avec des fichiers du même nom mais avec un cas différent
Je ne sais pas si ce problème est pire que d'avoir un fichier au nom non conventionnel dans votre projet pour toujours, mais il vaut la peine de savoir s'il y a beaucoup d'utilisateurs avec beaucoup de branches qui devront toutes être fusionnées à terme.
la source
À mon avis, il manque un moyen simple. Vous pouvez le faire pour un seul fichier, un répertoire spécifique ou même l'ensemble du référentiel:
Si vous souhaitez affecter également les sous-répertoires, vous devez utiliser l'
-r
indicateur:la source
Avec NTFS (ou FAT), une seule
git mv
commande ne résout pas le problème. Cette question montre une technique qui fonctionne: git mv et ne change que la casse du répertoirela source