2009-11-24 9 views
143

Hay un par de archivos en nuestra base de código controlada por git a los que me gustaría cambiar el nombre. Específicamente, solo quiero cambiar la caja del archivo, de modo que sourceCode.java se convierta en SourceCode.java, por ejemplo. El truco: estoy en una caja de Windows, y el sistema de archivos piensa que esos son del mismo nombre.¿Cambiar la caja de un archivo en Windows?

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

+3

Desde Git 2.0.1+ (junio de 2014), un simple 'git mv' debería funcionar (http://stackoverflow.com/a/24979063/6309). Incluso en Windows. – VonC

+9

Así se hace, cerrando esta pregunta como un duplicado de una pregunta claramente diferente ... –

+0

no es un duplicado. – worc

Respuesta

235

un vistazo aquí para más consejos sobre cómo hacerlo:

How to make git ignore changes in case?

O:

git mv -f name.java Name.java 
+7

Como nota aparte, esto no funciona en un sistema de archivos FAT. Llevo un código de proyecto en una memoria USB y los cambios de casos son un verdadero dolor. – asm

+0

Esto no funcionó para mí en el sistema NTFS y Windows 10 – Roboblob

34

Si usted está en un sistema de archivos FAT su única opción es hacer un cambio de nombre en dos etapas:

  1. Renombrar sourceCode.java a anything.you.like
  2. Renombrar anything.you.like a SourceCode.java

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

+4

Solo una nota para los demás: No es necesario realizar un compromiso intermedio, pero es necesario agregar al índice para que git note el cambio – arberg

17

Los siguientes pasos permiten que cambie el caso en Windows:

  • Agregar ignorecase = false a [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 = false agregado en el primer paso.

De esta manera tiene una única confirmación que contiene el cambio de nombre y hace que sea fácil cambiar, p. un directorio completo.

+2

Hazlo para la configuración global y local de baño: $ gti config --global core.ignorecase falso $ gti config core.ignorecase false –

+0

Este es el único enfoque que funcionó para mi. ¡Gracias! – Roboblob

4

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 viejo 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 son). Para fusionar, debe realizar una solución manual como eliminar los archivos antes de fusionar.

Ver Git rebase issue with files of same name but different case

No estoy seguro de si este problema es peor que tener un archivo llamado poco convencional en su proyecto y para siempre, pero vale la pena conocer si hay una gran cantidad de usuarios con un montón de ramas que todos necesitarán fusionarse eventualmente.

Cuestiones relacionadas