¿Cómo cambio el nombre de un archivo en git que difiere solo por mayúsculas y minúsculas?

En mi proyecto git (Xcode), cometí un nombre de archivo con mayúsculas y minúsculas. Ahora fui a tratar de cambiarle el nombre, pero cuando confirmo, obtengo:

fatal: no agregará el alias de archivo 'MyProject/MyFile.h' ('MyProject/MyFilE.h' ya existe en el índice)

Estoy seguro de que esto se debe a que git no está acostumbrado a ejecutarse en un sistema de archivos que no distingue entre mayúsculas y minúsculas como HFS+. Pero, ¿cómo puedo evitarlo?

Intenté cambiar el nombre de ambos archivos a otra cosa, lo confirmé y luego les cambié el nombre a lo que quiero, pero aún falla (con el mismo mensaje de error).

Respuestas (4)

Como se preguntó y respondió en stackoverflow , hay una manera más fácil de hacer esto que no implica crear un nuevo sistema de archivos en un archivo de imagen de disco:

Mueva su archivo existente a un lado, confirme ese movimiento, luego muévalo hacia atrás usando el caso que le gustaría mantener y confirmar. Hecho.

Ejemplo:

mv foo foo2
git add -A
git commit -m "renaming"
mv foo2 FOO
git add -A
git commit --amend -m "renamed foo to FOO"
con el fin de evitar la rotura del enlace, generalmente le pedimos que copie las partes relevantes de la respuesta detrás del enlace en el cuerpo de la respuesta.
Gracias @ian-c. Esperaba que esta regla no se aplique a los enlaces dentro de la familia stackexchange.
Sí, entiendo lo que dices, pero la consistencia es buena.
Extraño. Estaba seguro de que probé esto, pero hoy funciona. Gracias.

Paso 1 : simplemente cambie el nombre del archivo con un nombre que sea más diferente (que solo el caso de las letras). Simplemente elija un nombre aleatorio diferente del nombre actual y del nombre que desea darle.

Paso 2 : confirme este archivo por GUI (Xcode) o por CLI (Terminal)

Paso 3 : cambia el nombre del archivo como querías cambiarlo en primer lugar. Así que ahora, también habrá más diferencias que solo el caso con el nombre anterior.

Paso 4 : confirme el archivo renombrado nuevamente.

No se necesitan trucos de magia. Y puede elegir confirmar por GUI o CLI.

Todavía no he encontrado una manera de solucionar esto directamente en un sistema de archivos que no distingue entre mayúsculas y minúsculas, necesita un sistema de archivos que distinga entre mayúsculas y minúsculas.

Afortunadamente, Mac OS X tiene un buen soporte de montaje de disco virtual, por lo que puede obtener (crear) rápida y fácilmente un sistema de archivos sensible a mayúsculas y minúsculas (temporal) en su computadora.

Abra la Utilidad de Discos, cree una Nueva Imagen y configure el campo "Formato" en una de las versiones que distinguen entre mayúsculas y minúsculas de "Mac OS Extended". También asegúrese de hacerlo lo suficientemente grande para su repositorio.

Monte su nuevo disco, verifique el repositorio de git en él, asegúrese de que el archivo con el nombre correcto tenga el contenido correcto y elimine el otro. Confirme y envíe sus cambios, y luego puede desmontar la imagen del disco y eliminarla.

Si no tiene un servidor remoto para clonar (es decir, solo está ejecutando un repositorio git localmente en su disco duro), recuerde que puede clonar directamente desde el otro repositorio git en su disco duro.

Eso es terriblemente laborioso. Puede hacer esto sin tener que activar un nuevo sistema de archivos en un archivo de imagen de disco.

Yo uso sourcetree. Sin usar CLI, hay un paso fácil para hacer esto. cambie el nombre del archivo a otro nombre (por ejemplo, Index.php a Index_old.php), luego confirme y presione ... vuelva a cambiar el nombre al nombre deseado (index.php), luego confirme y envíe.