10
votes

Comment résoudre un conflit de capitalisation de dossier avec GIT sous Windows?

Je fais un Git Rebase , et je suis coincé parce que dans un commettre, j'ai un dossier nommé proto , mais dans l'autre commettre, j'ai un dossier nommé proto . C'était une erreur honnête et aurait dû être proto dans les deux cas. Le mieux que je puisse comprendre ici est d'essayer de supprimer le dossier des commits, puis d'essayer à nouveau la Rebase, mais il doit y avoir une meilleure façon.

Dans le passé, lorsque je rencontre des problèmes de capitalisation avec un fichier, j'ai utilisé Git MV, mais avec le dossier, il ne me laissera pas exécuter git mv, et je ne sais pas pourquoi.

Quelle est la bonne façon de corriger un problème de capitalisation de dossier dans GIT sous Windows?

git

0 commentaires

4 Réponses :


0
votes

GIT CONFIG-CORE. Ignorecase true devrait résoudre votre problème sous Windows.


1 commentaires

Cela permettra-t-il de réécrire l'historique afin que la capitalisation soit corrigée?



1
votes

Le dossier de contrebande La renomme dans l'historique GIT est difficile, car les dossiers ne sont pas suivis - uniquement des fichiers dans les dossiers. En supposant que vous souhaitez renommer oldfolder à oldfolder Vous pouvez essayer ce qui suit:

  1. Rebase de manière interactive du point où vous avez créé un fichier dans oldfolder . Modifiez chaque commit qui ajoute des fichiers à ce dossier. Lorsque INTERACTIVE REBASE s'arrête, créez NewFolder et exécutez GIT MV OldFolder / * NewFolder / . Faites ce dernier pour chaque arrêt de la boîte de rebas interactive.

  2. Évidemment, vous ne pouvez pas avoir oldfolder et NewFolder Soyez deux versions majuscules différemment du même mot dans Windows. Par conséquent, répétez l'étape 1 pour renommer NewFolder à OldFolder .


1 commentaires

Merci pour l'aide, vous deviez revenir en arrière et supprimer le dossier d'une succursale, effectuer la Rebase, puis ajoutez manuellement les fichiers dans Post Rebase.



0
votes

[édité] Je soupçonne que vous avez besoin de "git mv" chaque fichier dans le dossier sur un nom de Temp comme "Protox", puis "Git MV" Les fichiers Temp-nommés sur "proto", car git ne suit pas les dossiers en eux-mêmes - seulement le fichiers dans les dossiers.

Le double "git mv" fonctionne autour de systèmes de fichiers insensibles de casse-fenêtres. (Vous devriez pouvoir passer directement à partir de "proto" sur "proto" sur les systèmes de fichiers sensibles à la casse, comme Linux.)


0 commentaires

18
votes

Nous avons rencontré un problème similaire dans notre référentiel git sous Windows lorsqu'un grand nombre de fichiers ont été déplacés vers différents répertoires.

J'ai corrigé notre problème la première fois manuellement en clonant le référentiel à une machine virtuelle Linux et en exécutant un script Bash avec git mv pour corriger le problème de cas de chemin de fichier. C'était un processus douloureux, alors j'ai décidé de développer un utilitaire qui automatise le processus.

Git Unite est une application de console .NET que j'ai écrit à l'aide du libgit2shaarp bibliothèque. Le programme identifie toutes les entrées d'index GIT avec un cas de chemin de fichier différent de ce que le système de fichiers Windows rapporte.

J'ai écrit un blog postant détaillant l'outil, l'utilisation et l'histoire derrière elle à GIT Unite - Correction des chemins de fichiers sensibles à la casse sur Windows


2 commentaires

Merci beaucoup pour cet outil! Cela nous a sauvé quelques heures de fixer manuellement notre référentiel en désordre.


Merci beaucoup d'homme. C'était très utile pour nous ici! Il est efficace et simple à utiliser