2009-10-20 7 views
3

Nous travaillons dans un environnement mixte sensible à la casse/insensible (cywgin/linux), et aujourd'hui quelqu'un a créé un petit chaos dans notre flux de travail en renommant un fichier, en changeant un S en un s. Cela a provoqué toutes sortes de problèmes de fusion intéressants entre les succursales, et pour être honnête, personne ne sait exactement ce qui s'est passé.Comment changer la casse d'un fichier dans git sous cygwin?

Quelle est la manière la plus appropriée de changer le boîtier d'un fichier sous git pour cygwin? Je dois souligner que nous sommes sensibles à la casse et ne normalement ce droit - s'il n'y avait pas que S.

+1

Je n'ai jamais utilisé git sous cygwin - est-ce que 'git mv' ne vérifie pas le renommer correctement? – Cascabel

Répondre

2

Après avoir réfléchi quelques minutes, il semble très probable git-mv ferait ce que vous devez. Je suis assez sûr qu'il tentera le renommage (qui pourrait être un no-op sur un système d'exploitation insensible à la casse) puis ajouter le renommer à l'index. Cela devrait être basé sur les arguments, pas sur le fichier réel - je vois rename_cache_entry_at(pos, dst); dans builtin-mv.c.

Je ne sais pas si cela fait partie de ce que vous demandez ou non, mais par rapport à votre chaos de branche, voici l'approche générale que vous voulez sans doute prendre:

  • engager le changement de nom fix à toutes vos branches les plus éloignées. Il s'agit probablement de branches de rubrique et de maintenance - celles qui sont fusionnées dans d'autres branches sans jamais fusionner les branches.
  • Fusionnez ces branches selon votre flux de travail normal, en corrigeant les conflits pouvant résulter du changement de nom.
  • Encouragez tout le monde à tirer rapidement, juste au cas où le problème pourrait se propager davantage. Par exemple, quelqu'un pourrait travailler sur le fichier renommé, puis tirer, et corriger le conflit de renommer le mauvais sens, ce qui entraînerait un état qui recréerait le problème quand on le pousse/tire.
+4

Pour ceux qui trouvent cela, vous devrez utiliser "git mv -f" pour forcer le changement de nom, car Cygwin se plaindra que la source et la destination sont les mêmes. –

1

Je voudrais souligner que comme fallback vous pouvez manipuler les entrées dans l'index (la zone de mise en scène), d'où vous seriez en mesure de commettre avec « git commit » (et non « git commit -a ") avec git update-index commande de plomberie (niveau bas).

3

J'ai juste eu un problème semblable à ceci où je voulais simplement renommer un répertoire, 'Scripts', en 'scripts'. Je travaille actuellement à Cygwin donc ce n'était pas si facile. Si je tente de le faire comme je le ferais sous GNU/Linux, j'obtiens une erreur.

$ git mv foo Foo 
fatal: renaming foo failed: Invalid argument 

Cependant, je réalise que je contournerait ce que je suppose sont les lacunes de Windows en déplaçant deux fois, d'abord à un nom qui ne sont pas en collision, puis le nom réellement désiré.

$ git mv foo Foo2 && git mv Foo2 Foo 

J'avais caché mon arbre de travail loin de ce changement mais pour que je puisse l'engager séparément et évidemment ne pas penser à des choses à travers parce que maintenant les fichiers sous le répertoire que je me suis déplacé ne pas fusionner de la planque à mon arbre. : -/Dans mon cas, c'est un problème mineur cependant (et pour être sûr, j'ai tarballé l'arbre avant d'essayer ceci, je peux donc toujours le faire de manière puissante non-versionnée ...: P).

Questions connexes