Cambiar el uso de mayúsculas de los nombres de file en Git

Estoy intentando cambiar el nombre de un file para que tenga mayúsculas diferentes de las que tenía antes:

git mv src/collision/b2AABB.js src/collision/B2AABB.js fatal: destination exists, source=src/collision/b2AABB.js, destination=src/collision/B2AABB.js 

Como puede ver, git le da un ataque a esto. Traté de cambiar el nombre usando simplemente el antiguo command mv , pero git no recoge el cambio de nombre (como un cambio de nombre o como un nuevo file sin seguimiento).

¿Cómo puedo cambiar un file para que tenga una mayúscula diferente con el mismo nombre? Estoy en Mac OS X 10.7.3 con git 1.7.9.1 usando zsh 4.3.15.

Al iniciar git 2.0.1 (25 de junio de 2014), un git mv solo funcionará en sistemas operativos que no distingan entre mayúsculas y minúsculas .

Ver commit baa37bf por David Turner ( dturner-tw )

mv : permite el cambio de nombre para corregir el caso en filesystems insensibles a mayúsculas y minúsculas

" git mv hello.txt Hello.txt " en un sistema de files insensible a mayúsculas / minúsculas siempre desencadena el error "el destination already exists ", porque estos dos nombres se refieren a la misma ruta desde el punto de vista del sistema de files y requiere que el usuario otorgue " --force "cuando se corrige el caso de la ruta registrada en el índice y en el siguiente compromiso.

Detecta este caso y permite sin requerir " --force ".

git mv hello.txt Hello.txt simplemente funciona (no se requiere más git mv hello.txt Hello.txt ).

Teniendo en count las respuestas anteriores, puede hacer que funcione con un solo command con "–force":

  git mv --force myfile MyFile 

Algunas veces quiere cambiar el uso de mayúsculas de muchos files en OS X. Hacer commands de git mv se cansará rápidamente, para hacer las cosas un poco más fáciles, esto es lo que hago:

  1. Mueva todos los files fuera del directory para digamos el Escritorio.
  2. Haz un git add . -A git add . -A para eliminar todos los files.
  3. Cambie el nombre de todos los files en el escritorio a las mayúsculas adecuadas.
  4. Mueva todos los files de vuelta al directory original.
  5. Haz un git add . git debería ver que los files cambian de nombre.

Ahora puede hacer una confirmación diciendo que ha cambiado las mayúsculas del file.

Los nombres de files en OS X no distinguen entre mayúsculas y minúsculas (por defecto). Esto es más un problema de SO que un problema de git. Si quita y vuelve a agregar el file, debe get lo que desea o cambiarle el nombre a otra cosa y luego renombrarlo.

Como OP es sobre "Cambio de mayúsculas de nombres de file en Git":

Si está intentando cambiar el uso de mayúsculas de un nombre de file en su proyecto, no necesita forzar el cambio de nombre de git. IMO, preferiría cambiar la Capitalización de mi IDE / editor y asegurarme de configurar git correctamente para elegir el cambio de nombre.

Por defecto, una plantilla de git está configurada para ignorar mayúsculas y minúsculas (no importa mayúsculas y minúsculas). Para verificar que tiene la plantilla pnetworkingeterminada use --get para recuperar el valor de una key especificada. Utilice --local y --global para indicar a git si desea recuperar el valor-key config de su configuration de repository git local o global. Como, un ejemplo si desea search su key global core.ignorecase :

 git config --global --get core.ignorecase 

Si esto devuelve true asegúrese de establecerlo como:

 git config --global core.ignorecase false 

(Asegúrate de tener los permissions adecuados para cambiar a nivel global) Y ahí lo tienes, ahora tu git no ignorará Capitalizaciones y las tratará como cambios.

Como sugerencia, si está trabajando en proyectos en varios idiomas y cree que no todos los proyectos deberían ser tratados como sensibles a las mayúsculas por parte de git, simplemente actualice el core.ignorecase

Puede abrir el directory ".git" y luego editar el file "config". En "[core]", establezca "ignorecase = true" y habrá terminado;)

Este fragment de python git mv --force todos los files de un directory a ser minúsculas, por ejemplo: foo / Bar.js se convertirá en foo / bar.js a través de git mv foo/Bar.js foo/bar.js --force

Modifícalo a tu gusto, solo pensé que lo compartiría 🙂

 import os import re searchDir = 'c:/someRepo' exclude = ['.git', 'node_modules','bin'] os.chdir(searchDir) for root, dirs, files in os.walk(searchDir): dirs[:] = [d for d in dirs if d not in exclude] for f in files: if re.match(r'[AZ]', f): fullPath = os.path.join(root, f) fullPathLower = os.path.join(root, f[0].lower() + f[1:]) command = 'git mv --force ' + fullPath + ' ' + fullPathLower print(command) os.system(command) 

Para agrupar git mv en minúsculas en macOS:

 for f in *; do git mv "$f" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done 

Minúscula todos los files en una carpeta.