¿Cambiar el caso de un archivo en Windows?

209

Hay un par de archivos en nuestra base de código controlada por git que me gustaría cambiar el nombre. Específicamente, solo quiero cambiar el caso del archivo, para que se sourceCode.javaconvierta SourceCode.java, por ejemplo. El problema: estoy en un cuadro de Windows, y el sistema de archivos piensa que esos son el mismo nombre de archivo.

¿Cómo puedo hacer que Windows y Git reconozcan ese cambio y lo registren?

Electrones_Ahoy
fuente
3
Desde Git 2.0.1+ (junio de 2014), un simple git mvdebería funcionar ( stackoverflow.com/a/24979063/6309 ). Incluso en Windows.
VonC

Respuestas:

337

Eche un vistazo aquí para obtener más sugerencias sobre cómo hacerlo:

¿Cómo hacer que git ignore los cambios en el caso?

O:

git mv -f name.java Name.java
Igor Zevaka
fuente
8
Por otro lado, esto no funciona en un sistema de archivos FAT. Llevo algo de código de proyecto en una memoria USB y los cambios de casos son un verdadero dolor.
asm
1
Esto no funcionó para mí en el sistema NTFS y Windows 10
Roboblob
1
Esta es seguramente la forma correcta de hacerlo, pero si necesita cambiar el nombre de muchos archivos, puede ser tedioso. Si ya los ha cambiado de nombre de alguna manera en el sistema de archivos y solo desea confirmar esos cambios, puede cambiar el nombre de alguna carpeta principal, hacer una git addde esa carpeta recién renombrada, NO COMUNICARSE, cambiar el nombre de la carpeta a lo que debería ser , git addotra vez y luego cometer.
Okonomiyaki3000
Funciona en NTFS y Windows 7.
Hans Goldman
¿Es posible hacer esto a granel? por ejemplo, con powershell,Get-ChildItem '.' | Rename-Item {$_.Name.ToLowerCase()}
killjoy el
49

Si está en un sistema de archivos FAT, su única opción es cambiar el nombre de dos etapas:

  1. Renombrar sourceCode.javaaanything.you.like
  2. Renombrar anything.you.likeaSourceCode.java

En los días en que usamos Perforce, teníamos exactamente este problema y esta era la única solución que podíamos encontrar.

ChrisF
fuente
13
Sólo una nota para los demás: No es necesario comprometerse en el medio, pero es necesario añadir al índice de Git a cambio previo aviso
Arberg
29

Los siguientes pasos me permitieron cambiar el caso en Windows:

  • Añadir ignorecase = falsea [core]en .git/config;
  • Mueva los archivos que va a renombrar fuera del directorio de su proyecto;
  • Agregue las eliminaciones al índice;
  • Mueva todos los archivos a su ubicación original y cambie el caso de los archivos y / o directorios;
  • Agregue todos los archivos "nuevos" al índice;
  • Eliminar ignorecase = falseagregado en el primer paso.

De esta manera, tiene una confirmación única que contiene el cambio de nombre y facilita el cambio, por ejemplo, un directorio completo.

Pieter van Ginkel
fuente
55
Hazlo para la configuración global y local del baño: $ gti config --global core.ignorecase false $ gti config core.ignorecase false
Roman Ivanov
6

Ten cuidado. Hacer esto puede conducir a cambios que son imposibles de fusionar. Git se confunde al fusionarse en Windows porque no puede decidir si el antiguo nombre en mayúsculas y el nuevo nombre en minúsculas son el mismo archivo o no (para Git no lo son, pero para el sistema de archivos sí lo son). Para fusionar, debe hacer una solución manual, como eliminar los archivos antes de fusionarlos.

Vea el problema de rebase de Git con archivos del mismo nombre pero con un caso diferente

No estoy seguro de si este problema es peor que tener un archivo con un nombre poco convencional en su proyecto para siempre, pero vale la pena saber si hay muchos usuarios con muchas ramas que eventualmente necesitarán fusionarse.

jwg
fuente
Los archivos con nombres no convencionales en proyectos medianos a grandes siempre deben evitarse si es posible debido a problemas al desarrollar para múltiples plataformas (retrasar la reparación de algo así hasta más tarde hará que los problemas de la solución sean más graves). A veces está desarrollando en Windows, pero también necesita hacer una compilación de Linux, y una inclusión que funcionaría bien en Windows hace que la compilación se rompa en Linux.
Griffork
3

En mi opinión, falta una forma simple. Puede hacer esto para un solo archivo, un directorio específico o incluso todo el repositorio:

git rm --cached <file name or directory>
git add <file name or directory>

Si desea afectar también los subdirectorios, debe usar la -rbandera:

git rm -r --cached <directory>
git add <directory>
Nils-o-mat
fuente
Realmente el más simple.
Ranu
Esto pierde todo el historial del archivo, ya que git lo configura como completamente nuevo.
Alejandro
@Alejandro Lo que dices está mal. Acabo de probarlo y git reconoció el cambio de nombre sin ningún problema. Como en otros casos, el archivo se muestra como eliminado / nuevo en el índice, pero al confirmar, git se da cuenta de que acaba de cambiar su nombre.
Nils-o-mat