Cambio la capitalización de un directorio y Git no parece captarlo.


139

Estoy desarrollando un proyecto en OS X Lion que está bajo el control de versión de Git. Tenía estos directorios en minúsculas y luego los capitalicé (por ejemplo, emailaddresses => EmailAddresses), pero Git no parece reconocer el cambio. Todavía piensa que los directorios están en minúsculas cuando ejecuto git ls-filesy otros comandos.

¿Es inofensivo o debería hacer algo más para que Git se dé cuenta de este cambio?



Esto me creó confusión durante 2 días. Ahora lo entiendo. Gracias por esta pregunta
945

Respuestas:


199

Probablemente esté utilizando HFS +, que no distingue entre mayúsculas y minúsculas (pero conserva) Normalmente trabajo alrededor de esto así:

$ git mv somename tmpname
$ git mv tmpname SomeName

1
Este es el mismo problema que tengo, y esto es lo que hago.
fernferret

3
Tuve el mismo problema con la herramienta Github para Windows. Una vez más, la solución anterior resuelve bien el problema: cambie el nombre a un archivo temporal en Windows Exploer, luego, después de confirmar, cambie el nombre al nombre final con el caso correcto.
Jason

9
O hágalo con un solo comando: git mv --force somename SomeName (from stackoverflow.com/a/16071375/217866 )
jackocnr

1
Para que los cambios se reflejen en el repositorio remoto, también debe hacerlo git push origin master. Si git se niega a actualizar el control remoto, es posible que deba agregar un archivo ficticio (por ejemplo touch stam) y hacer la inserción. Seguido por una posterior eliminación de stam y presionar nuevamente.
Rahav

2
Una cosa a tener en cuenta es que debe estar en la carpeta donde está el archivo para que esto funcione. Al principio no era obvio para mí y seguía obteniendo >>> mala fuente, source = somename, destination = tmpname <<< porque estaba tratando de ejecutar el comando desde la raíz del repositorio.
Parth Tamane

281

Puedes decirle a git que tenga en cuenta el caso ejecutando

git config core.ignorecase false


44
Realmente una excelente respuesta si ya ha cambiado los nombres de los archivos sin usar git mv --force o algún otro script CL. ¡Gracias!
MeanMatt

44
¡Esta es la respuesta superior ya que no tenía ganas de hacer 200 archivos renombrados manualmente!
Adam Reis

1
Acordó que esta debería ser la respuesta principal. Gracias.
HomerPlata

1
por alguna razón duplicó todos los archivos, ahora tengo las versiones originales y las que tienen mayúsculas cambiadas ...
Salatiel

1
@Salatiel Supongo que los duplica cuando ya estás rastreando el archivo.
Iggy

36

Cómo git mv en Mac Case-Sensitively

Esto sucede porque Mac OS X implementa características de preservación de mayúsculas y de insensibilidad de mayúsculas y minúsculas que están destinadas a ayudarlo.

Aunque las sugerencias de doble cambio de nombre en la otra respuesta funcionarán, recomiendo el uso de '--force' para un resultado de mejores prácticas:

$ git mv --force somename SomeName


Nota: si lo intentas sin la opción force, git te vomitará así:

$ git mv somename SomeName
$ fatal: destination exists, source=somename, destination=SomeName

En el ejemplo anterior, el comando git falla y no se cambian archivos en el sistema de archivos o en el índice de git.


A la primera orden, me sale fatal: not under version control.
2540625

Ese error fatal significa que no tiene un repositorio GIT en esa ubicación. gitLos comandos solo funcionan en directorios con repositorios GIT.
David Manpearl

Pero estaba en un subdirectorio de mi repositorio de Git ... Al final, lo resolví mediante la respuesta de Taran , por cierto. Gracias.
2540625

19

Intente cambiar la opción de configuración de git core.ignorecase a false en su archivo .gitconfig.


44
o escribagit config core.ignorecase false
iforgotmypassword

2
@iforgotmypassword = deberías haberlo respondido - Hubiera votado por ti en realidad
Abdeali Chandanwala

4

Los siguientes pasos me ayudaron a resolver el problema:

  1. Cambie el nombre de la carpeta a temp:

    mv Folder temp                  // It will rename your Folder to temp
    
  2. Etapa y compromiso:

    git add .
    git commit -m "Temp"
    
  3. Cambie el nombre de la tempcarpeta a su elección:

    mv temp folder        // It will rename temp folder to the name of your choice(folder)
    git add .
    git commit -m "Folder Fixed"
    

Listo: ahora puedes empujar.


1

Si lo hace git mv AAA aaao git mv -f AAA aaa, no será trabajo y tendrá un error fatal: renaming 'AAA' failed: Invalid argument.

Porque AAAy aaason UNA MISMA carpeta / archivo en sistemas de archivos que no distinguen entre mayúsculas y minúsculas, mover AAAa aaasignifica mover AAAcomo aaa/AAA.

Entonces deberías hacer

git mv AAA aaa.1
git mv aaa.1 aaa

Espero que te sea útil.


1

La razón de esto es que el sistema operativo basado en LINUX o macOS ignoran mayúsculas y minúsculas para el nombre del archivo / carpeta. Necesitamos resolver este problema siguiendo los pasos a continuación.

For Exp, you want to change folder name from Base to base
1. mv Base base2
2. git add . && git commit -m "Fix folder name problem (wip)"
3. mv base2 base
4. git add . && git commit -m "Fixed folder name problem"

0

Ninguna de estas soluciones funcionó para mí. SourceTree siempre estaba creando mi sucursal con un caso diferente de lo que quería. Entonces, cómo lo resolví fue:

1 - Mira tus archivos git en el buscador. Puede hacerlo escribiendo esto en la terminal:

- `defaults write com.apple.finder AppleShowAllFiles TRUE`
- `killall Finder`

2 - Reinicia el buscador y ve al directorio de tu proyecto

3 - Ahora solo cambia el nombre de tu carpeta, digamos de Característica a característica. Y ahi tienes.



0

Tuve el mismo problema y uso la solución a continuación. Lo uso para lotes, directorios y nombres de archivos, etc.

git rm -r --cached .
git add --all .
git commit -a -m "Versioning updated directory/file names"
git push origin master

Como se detalla aquí.


0

Ninguno de estos realmente me ayudó, todavía tenía que decirme que escondiera mis cambios, porque mi situación era que mi carpeta local estaba en mayúscula pero no en el remoto, y mi rama estaba detrás y ya no podía tirar debido a las diferencias de capitalización de archivos en la estructura de carpetas.

La única forma en que pude solucionar esto fue eliminando mi sucursal local y revisando el control remoto.

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.