¿Cómo cambias las mayúsculas de los nombres de archivo en Git?

9 minutos de lectura

avatar de usuario de knpwrs
knpwrs

Estoy tratando de cambiar el nombre de un archivo para que tenga una capitalización diferente a la que tenía antes:

git mv src/collision/b2AABB.js src/collision/B2AABB.js
fatal: destination exists, source=src/collision/b2AABB.js, destination=src/collision/B2AABB.js

Como puede ver, Git lanza un ataque por esto. Intenté cambiar el nombre usando solo el antiguo mv comando también, pero Git no recoge el cambio de nombre (como un cambio de nombre o como un nuevo archivo sin seguimiento).

¿Cómo puedo cambiar un archivo para que tenga diferentes mayúsculas del mismo nombre? Estoy en Mac OS X v10.7.3 (Lion) con Git 1.7.9.1 usando caparazón Z (zsh) 4.3.15.

  • se debe a que el sistema de archivos osx conserva mayúsculas y minúsculas y no distingue entre mayúsculas y minúsculas de forma predeterminada. Simplemente puede proceder en dos pasos: git mv myfile foo; git mv foo MyFile

    – tonio

    9 mayo 2012 a las 20:51

  • Lo tengo funcionando con “git mv –force myfile MyFile”.

    – Marcello DeSales

    17 abr 2013 a las 22:29

  • engañado de stackoverflow.com/questions/6899582/…

    – jackocnr

    24 de julio de 2013 a las 10:52

  • A partir de git 2.0.1 (junio de 2014), git mv hello.txt Hello.txt funcionará en sistemas operativos que no distinguen entre mayúsculas y minúsculas. Mira mi respuesta a continuación

    – VoC

    27 de julio de 2014 a las 8:02

  • Vinculando stackoverflow.com/questions/1793735/…

    – Oleg Estejin

    07/04/2015 a las 11:17


Avatar de usuario de VonC
VonC

A partir de Git 2.0.1 (25 de junio de 2014), un git mv solo funcionará en un sistema operativo que no distingue entre mayúsculas y minúsculas.

Ver cometer baa37bf por David Turner (dturner-tw).

mv: permitir el cambio de nombre para corregir mayúsculas y minúsculas en sistemas de archivos que no distinguen entre mayúsculas y minúsculas

git mv hello.txt Hello.txt” en un sistema de archivos que no distingue entre mayúsculas y minúsculas siempre se activa “destination already exists” error, porque estos dos nombres se refieren a la misma ruta desde el punto de vista del sistema de archivos y requiere que el usuario proporcione “--force” al corregir el caso de la ruta registrada en el índice y en el próximo compromiso.

Detecta este caso y permítelo sin requerirlo”--force“.

git mv hello.txt Hello.txt simplemente funciona (no --force requerido más).


La otra alternativa es:

git config --global core.ignorecase false

Y cambie el nombre del archivo directamente; git agregar y confirmar.

Funciona en un CMD. Puede fallar en una sesión de git bash (en Windows) (vea la respuesta de Louis-Caron)

Como señaló jaquinocode en los comentarios, si su propio repositorio local tiene esa configuración:

git config --local core.ignorecase false

  • FWIW esto retrocedió o nunca funcionó en Windows. Estoy en 2.15.1.windows.2 y todavía necesito usar –force

    – TTimo

    26 de diciembre de 2017 a las 19:09


  • @Adowrath ¡Buenas noticias!

    – VoC

    9 de julio de 2018 a las 9:15

  • ¿Funcionará esto también para las extensiones en mayúsculas? Por ejemplo, si tengo un nombre de archivo image.TXT y quiero cambiarle el nombre como image.txt

    – Siluveru Kiran Kumar

    21 de junio de 2019 a las 5:14

  • Conseguí que esto funcionara en Windows ejecutando este comando y git config core.ignorecase false

    -John Targaryen

    5 de mayo de 2020 a las 11:13

  • @jaquinocode Buen punto. He incluido tu comentario en la respuesta para mayor visibilidad.

    – VoC

    30 de diciembre de 2021 a las 19:36

Avatar de usuario de Marcello DeSales
marcelo de sales

Teniendo en cuenta la respuesta de larsks, puede hacer que funcione con un solo comando con --force:

git mv --force myfile MyFile

  • Si está en un sistema de archivos que no distingue entre mayúsculas y minúsculas y obtiene un error fatal “Argumento no válido”, intente estos pasos en su lugar: stackoverflow.com/questions/3011625/…

    – Levi

    1 de diciembre de 2013 a las 19:10

  • Si bien esta es la respuesta correcta para el primer paso, ¿cómo proceder a cambiar a otra rama en Mac OS X cuando la otra rama tiene las mayúsculas antiguas? Recibo **** error: los siguientes archivos de árbol de trabajo sin seguimiento se sobrescribirán al finalizar la compra: ****

    – TJChambers

    17 de enero de 2014 a las 2:06


  • Esto falló en la confirmación para mí en Windows: Error: Will not add file alias 'MyFile' ('myfile' already exists in index)

    – perro naranja

    2 de febrero de 2016 a las 11:57


Avatar de usuario de MrHus
señorhus

A veces, desea cambiar las mayúsculas de muchos nombres de archivos en un sistema de archivos que no distingue entre mayúsculas y minúsculas (por ejemplo, en macOS o Windows). haciendo individual git mv los comandos se cansarán rápidamente. Para hacer las cosas un poco más fáciles, esto es lo que hago:

  1. Mueva todos los archivos afectados fuera del directorio a, digamos, el escritorio.
  2. hacer un git add . -A para organizar la eliminación de esos archivos.
  3. Cambie el nombre de todos los archivos en el escritorio a las mayúsculas adecuadas.
  4. Mueva todos los archivos al directorio original.
  5. hacer un git add .. Git debería ver que los archivos han cambiado de nombre.

Ahora puede hacer una confirmación diciendo que ha cambiado las mayúsculas del nombre del archivo.

  • Esto se produce a expensas de todo el historial de los archivos que ingresa y retira, ¿verdad? Supongo que git mv –force no tiene esta deficiencia.

    – LOAS

    4 de enero de 2018 a las 9:21

  • No, esto no eliminaría todo el historial. Tenga en cuenta que no hay compromiso entre los dos agregados.

    – Michael L Perry

    24 de enero de 2019 a las 22:15

  • esto es realmente lo que necesitaba. bien hecho. debe ser una respuesta también. ¡gracias!

    – Mehmet Kurtipek

    22 de junio de 2020 a las 21:35

  • Consulte también la respuesta de @softarn, que ofrece una sola línea conveniente para hacer todo esto a la vez 🙂

    – Waldyrious

    27/09/2021 a las 10:00

  • La forma mucho más simple y menos complicada de hacer esto es git rm -r --cached . + git add --all . como se explica en esta respuesta que merece muchos más votos a favor.

    – Íñigo

    31 de enero a las 1:57


avatar de usuario de larsks
alondras

Los nombres de archivo en OS X no distinguen entre mayúsculas y minúsculas (de forma predeterminada). Esto es más un problema del sistema operativo que un problema de Git. Si elimina y vuelve a agregar el archivo, debe obtener lo que desea, o cambiarle el nombre a otra cosa y luego cambiarle el nombre.

Avatar de usuario de Segmented
Segmentario

Colocar ignorecase a false en la configuración de git

Como la publicación original trata sobre “Cambiar el uso de mayúsculas en los nombres de archivo en Git”:

Si está tratando de cambiar las mayúsculas de un nombre de archivo en su proyecto, no necesita fuerza cambiarle el nombre desde Git. En mi opinión, preferiría cambiar las mayúsculas de mi IDE/editor y asegurarme de configurar Git correctamente para retomar el cambio de nombre.

De forma predeterminada, una plantilla de Git está configurada para ignorar mayúsculas y minúsculas (Git no distingue entre mayúsculas y minúsculas). Para verificar que tiene la plantilla predeterminada, utilice --get para recuperar el valor de una clave especificada. Usar --local y --global para indicarle a Git si debe elegir un valor-clave de configuración de la configuración del repositorio de Git local o global. Como ejemplo, si desea buscar su clave global core.ignorecase (si los comandos no devuelven nada, probablemente necesite prefijar con sudo):

git config --global --get core.ignorecase

si esto vuelve trueasegúrese de configurarlo como:

git config --global core.ignorecase false

(Asegúrese de tener los permisos adecuados para cambiar global). Y ahí lo tiene; ahora su instalación de Git no ignoraría las mayúsculas y las trataría como cambios.

Como sugerencia, si está trabajando en proyectos en varios idiomas y cree que Git no debe tratar todos los proyectos como sensibles a mayúsculas y minúsculas, simplemente actualice el local core.ignorecase archivo.

  • Y si git config --global --get core.ignorecase no devuelve nada. Lo es true?? porque después de configurarlo false devuelve falso (Windows 10)

    – fralbo

    7 de enero de 2017 a las 10:47

  • Y parece que no funciona como se esperaba. Quiero decir que el cliente de escritorio ve el cambio, pero después de confirmar/sincronizar, ¡el nombre del archivo permanece sin cambios en línea!

    – fralbo

    7 de enero de 2017 a las 12:33

  • Funcionó para mí (y mejor para múltiples archivos que usar git mv). También asumo que por defecto se considera verdadero (es decir, ignora el caso). O eso, o coincide con la política del sistema operativo para el uso de mayúsculas y minúsculas.

    – Jerry

    2 de diciembre de 2019 a las 10:10


  • Esta debería ser la respuesta seleccionada.

    – Dave Everitt

    17 abr 2020 a las 16:00

  • Es posible que cambiar la configuración global no funcione porque la configuración local la anula. Si no funciona para usted, marque ambos.

    – Xcálibur

    6 de noviembre de 2020 a las 3:04

Avatar de usuario de Peter Mortensen
Pedro Mortensen

Puede abrir el directorio “.git” y luego editar el archivo “config”. Bajo “[core]” establecer, establecer “ignorecase = true” y listo;)

  • Y si git config --global --get core.ignorecase no devuelve nada. Lo es true?? porque después de configurarlo false devuelve falso (Windows 10)

    – fralbo

    7 de enero de 2017 a las 10:47

  • Y parece que no funciona como se esperaba. Quiero decir que el cliente de escritorio ve el cambio, pero después de confirmar/sincronizar, ¡el nombre del archivo permanece sin cambios en línea!

    – fralbo

    7 de enero de 2017 a las 12:33

  • Funcionó para mí (y mejor para múltiples archivos que usar git mv). También asumo que por defecto se considera verdadero (es decir, ignora el caso). O eso, o coincide con la política del sistema operativo para el uso de mayúsculas y minúsculas.

    – Jerry

    2 de diciembre de 2019 a las 10:10


  • Esta debería ser la respuesta seleccionada.

    – Dave Everitt

    17 abr 2020 a las 16:00

  • Es posible que cambiar la configuración global no funcione porque la configuración local la anula. Si no funciona para usted, marque ambos.

    – Xcálibur

    6 de noviembre de 2020 a las 3:04

a granel git mv archivos a minúsculas en macOS y git bash en Windows:

for f in *; do git mv "$f" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done

Pondrá en minúsculas todos los archivos en una carpeta.

  • también funciona en windows en git bash. gracias por ahorrarme mucho tiempo! 🙂

    – Vincent Gagnon

    16 de marzo de 2021 a las 9:44

  • @VincentGagnon me alegra saberlo. Actualicé la respuesta con esa información.

    – suavizar

    16 de marzo de 2021 a las 9:57

¿Ha sido útil esta solución?