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.
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
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
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:
- Mueva todos los archivos afectados fuera del directorio a, digamos, el escritorio.
- hacer un
git add . -A
para organizar la eliminación de esos archivos. - Cambie el nombre de todos los archivos en el escritorio a las mayúsculas adecuadas.
- Mueva todos los archivos al directorio original.
- 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
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.
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 true
asegú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 estrue
?? porque después de configurarlofalse
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
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 estrue
?? porque después de configurarlofalse
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
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