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.