¿Git no distingue entre mayúsculas y minúsculas?

96

En el primer compromiso de mi llamado parcial _Electronicsse escribió comenzando con mayúsculas, luego lo cambié a _electronics.

Git bajo cygwin ignoró el caso después de confirmar el nuevo nombre, así que cambié el nombre a mano en el repositorio de destino.

Ahora, a veces cambia el _electronicsparcial comprometido a _Electronics.

¿Qué he hecho mal?

JAkk
fuente
9
¿En qué sistema operativo estás?
Keith Thompson
10
¿Qué sistema de archivos estás usando?
Andrew Marshall
Ventanas con cygwin. Mi servidor ejecuta Ubuntu Linux. No conozco el sistema de archivos, supongo que ext3 o ext2: mi proveedor configuró la instalación mínima.
JAkk
¿No te alegra que Windows haya decidido no distinguir entre mayúsculas y minúsculas?
Cascabel
4
Windows no distingue entre mayúsculas y minúsculas, pero a veces (con mayor frecuencia en la actualidad) conserva las mayúsculas y minúsculas .
Arafangion

Respuestas:

73

Se verá como 2 cosas diferentes, pero le causará problemas en un sistema que no distingue entre mayúsculas y minúsculas. Si este es el caso, asegúrese de completar con tabulación las rutas o nombres de archivo. Además, para cambiar el nombre de algo en el caso, haga esto:

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

Esta es una forma explícita de hacer cambios comprometiéndolos y luego colapsando los compromisos. Una forma más corta de hacerlo es manipular el índice y la carpeta de trabajo, todo en uno:

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

Esto también está relacionado con el ajuste de los nombres de directorio: git mv y solo cambia el caso del directorio

Adam Dymitruk
fuente
parece que esto era correcto (excepto que estaba cambiando de mayúsculas a minúsculas)
JAkk
Le eché un vistazo, siempre que esté acostumbrado a cygwin, es más cómodo usar cygwin, gracias por la pista
JAkk
Puedes simplemente hacer git mv file.txt File.txt. No estoy seguro de si se trata de una nueva función de git.
Phil
107

Dependerá del core.ignorecasevalor de configuración, que se establece en falso en sistemas de archivos que distinguen entre mayúsculas y minúsculas y verdadero en msysgit en Windows.

core.ignorecase

Si es verdadera, esta opción habilita varias soluciones para permitir que git funcione mejor en sistemas de archivos que no distinguen entre mayúsculas y minúsculas, como FAT. Por ejemplo, si una lista de directorios encuentra "makefile" cuando git espera "Makefile", git asumirá que es realmente el mismo archivo y continuará recordándolo como "Makefile".

El valor predeterminado es falso, excepto que git-clone (1) o git-init (1) sondearán y establecerán core.ignorecase verdadero si corresponde cuando se cree el repositorio.

Más detalles en esta respuesta a Cambiar el uso de mayúsculas en los nombres de archivo en Git .

manojlds
fuente
79
Esta es la respuesta correcta en mi opinión. Para mi futuro, utilícelo git config --unset-all core.ignorecase && git config --system core.ignorecase falsecon sudo.
Znarkus
2
lo mismo para James, @Znarkus ha identificado la solución para este problema en OS X, ¡Gracias!
Craig Nakamoto
1
@Znarkus también funciona en Windows. Hermoso.
Orlade
9
@Znarkus, el problema de hacer eso en OSX es que cuando cambia el nombre de un archivo a través del buscador, y solo cambia el caso, git verá la versión renombrada como un archivo completamente nuevo, pero no genera una "eliminación" correspondiente acción para la versión anterior del archivo. Entonces, si confirma y envía a github, github tendrá tanto el archivo con el nombre anterior como el recién nombrado, pero su sistema local solo tendrá el archivo nuevo, y git no se dará cuenta.
ivanreese
2
@spiralganglion Para desarrolladores web en OSX, realmente puedo recomendar crear una partición sensible a mayúsculas y minúsculas y luego montarla como su directorio www.
Znarkus
23

Esto es mucho más fácil:

git mv Electronics electronics -f
git commit -m "That was easy!"
Arnoud
fuente
1
¿Intentó esto en un sistema de archivos que no distingue entre mayúsculas y minúsculas?
Edward Thomson
1
Inicialmente leí esto como el póster original tratando de cambiar el nombre de una carpeta, no un archivo. Ahora que vuelvo a leer esto, no está claro. De hecho, mv -ffuncionará para un archivo.
Edward Thomson
21
git config --system core.ignorecase false
Cemo
fuente
0

En mi escenario, tenía dos carpetas testsy Testsque se mostraban como dos carpetas separadas en Github pero una sola Testscarpeta en Windows. Mi objetivo era combinarlos a ambos en tests.

Usé el siguiente enfoque:

  1. Crear una nueva carpeta temp
  2. Copiar todo el contenido de Testsatemp
  3. Eliminar Tests
  4. ejecutar git rm Tests -r
  5. Cambiar nombre tempatests
Jeroen Vannevel
fuente
0

Intenté resolver el problema y fue exitoso en Windows10

Supongamos que hay dos carpetas en bitbucket TEST y test, pero cuando clono el repositorio en el disco, solo crea TEST y quiero mantener la prueba como una sola carpeta en git que contiene todos los archivos.

Necesitaré ejecutar los siguientes comandos en la línea de comando git mv TEST test1 -f git mv text1 test -f git commit -m "renombrar ..." git push

Ahora verá que la jerarquía de carpetas se corrige en bitbucket.

Nitesh Goyal
fuente