¿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?


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


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 .


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!"

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

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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.