name guide change macos git version-control case-sensitive

macos - guide - git mv y solo cambiar caso de directorio



git rename file (10)

Esta es una solución rápida y segura contra errores:

git mv -f path/to/foo/* path/to/FOO/

¡Advertencia! Siempre renombra todos los archivos en la carpeta renombrada (usa /* ).

No renombrar archivos individuales. Esto conduce a un error, descrito en esta answer .

Si primero quieres ver el resultado primero, usa -n :

git mv -f -n path/to/foo/* path/to/FOO/

Después de haber hecho un mv :

  1. Cometer cambios
  2. Pago a cualquier otra revisión
  3. Pago de vuelta.

Ahora Git debería haber cambiado el nombre de la carpeta BOTH en sus archivos internos y en el sistema de archivos.

Si bien encontré una question similar, no encontré una respuesta a mi problema

Cuando intento cambiar el nombre del directorio de FOO a foo a través de git mv FOO foo , obtengo

fatal: renaming ''FOO'' failed: Invalid argument

DE ACUERDO. Así que intento git mv FOO foo2 && git mv foo2 foo

Pero cuando intento comprometerme vía git commit . yo obtengo

# On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # foo nothing added to commit but untracked files present (use "git add" to track)

Cuando agrego el directorio a través de git add foo nada cambia y git commit . Me da el mismo mensaje otra vez.

¿Qué estoy haciendo mal? Pensé que estoy usando un sistema que distingue entre mayúsculas y minúsculas (OSX) ¿por qué no puedo simplemente cambiar el nombre del directorio?


(Variante libre de git mv ).

Me encontré con este problema en Git en Mac OS X 10.9. Lo resolví de la siguiente manera:

git rm -r --cached /path/to/directory

Eso escalona el directorio para su eliminación en Git, pero en realidad no elimina ningún archivo físico ( --cached ). Esto también hace que el directorio, ahora con el caso adecuado, aparezca en archivos sin seguimiento.

Así que puedes hacer esto:

mv /path/to/directory /path/to/DIRECTORY git add -A /path/to/DIRECTORY

Git reconocerá que has cambiado el nombre de los archivos y, cuando hagas el git status Git, deberás ver varias líneas renamed: . Inspeccione y asegúrese de que se vean correctos, y si es así, puede confirmar los cambios normalmente.


Al mejorar la respuesta de Adam Dymitruk (es una tontería que SO no me deja comentar su respuesta), usar "git mv" mostrará automáticamente los archivos movidos. No es necesario el ocultamiento y se puede evitar el riesgoso "git add -A":

old="abc"; new="ABC"; tmp="$old-renamed"; git mv "$old" "$tmp"; git commit -m "Renamed ''$old'' to ''$tmp''."; git mv "$tmp" "$new"; git commit --amend -m "Renamed ''$old'' to ''$new''.";


Desea establecer la opción core.ignorecase en false, lo que hará que Git preste atención al caso en los sistemas de archivos que no lo admiten de forma nativa. Para habilitar en su repositorio:

$ git config core.ignorecase false

Luego, puede cambiar el nombre del archivo con git mv y funcionará como se esperaba.


Estás en un entorno insensible al caso. Además, agregar sin el -A no se hará cargo del lado mv del mv como Git lo entiende. ¡Advertencia! ¡Asegúrese de que no haya otros cambios o archivos sin seguimiento cuando haga esto o se confirmarán como parte de este cambio! git stash -u primero, haz esto y luego git stash pop después. Continuando: Para solucionar esto, haga lo siguiente:

mv foo foo2 git add -A git commit -m "renaming" mv foo2 FOO git add -A git commit --amend -m "renamed foo to FOO"

Esa es la forma extraída de cambiar el directorio de trabajo, confirmando y luego colapsando los 2 confirmaciones. Solo puede mover el archivo en el índice, pero para alguien que es nuevo en git, puede que no sea lo suficientemente explícito en cuanto a lo que está sucediendo. La versión más corta es

git mv foo foo2 git mv foo2 FOO git commit -m "changed case of dir"

Como se sugiere en uno de los comentarios, también puede hacer una rebase interactiva ( git rebase -i HEAD~5 si se introdujo el caso equivocado hace 5 confirmaciones) para solucionar el caso allí y no tener el caso equivocado en ningún lugar de la historia en todos. Debe tener cuidado si hace esto, ya que los hash de confirmación a partir de ese momento serán diferentes y los demás tendrán que reorganizar o volver a combinar su trabajo con el pasado reciente de la sucursal.

Esto está relacionado con la corrección del nombre de un archivo: ¿git no distingue entre mayúsculas y minúsculas?


Forzarlo con la opción -f:

git mv -f FOO foo


No está utilizando un sistema de archivos que distingue entre mayúsculas y minúsculas en OS X a menos que lo elija explícitamente. HFS + puede distinguir entre mayúsculas y minúsculas, pero el valor predeterminado no distingue entre mayúsculas y minúsculas.


Pude resolver esto, usando git 1.7.7 usando un nombre de archivo temporal:

$ git mv improper_Case improve_case2 $ git mv improve_case2 improve_case $ git commit -m "<your message>"


Tuve un problema relacionado

Una carpeta llamada ''Pro'' (creada primero) y otra ''pro'' (creada por error). En Mac, es lo mismo, pero diferente según git.

$ git config core.ignorecase false

git config cambió el nombre de los archivos a la carpeta correcta (gracias), y también creó archivos fantasma en ''pro'' (¡¡No !!). No pude agregar cambios de archivos fantasma a la pista y no pude verificar otras sucursales a menos que me llevara esos archivos conmigo, y tampoco pude restablecerlos de alguna manera.

En lugar de eso, lo hice

$ git rm -r --cached pro $ git status // => pro files removed, new Pro files untracked $ git add Pro

Para hacerlo más seguro, lo hice en una rama fija separada, y luego me fusioné con la rama principal

Para el problema del archivo fantasma creado por, ¿puede un gurú explicar cómo y por qué? Gracias por adelantado.


Aquí hay una solución realmente simple alrededor de todo el gitfoo en esta página.

  1. Copia los archivos de tu proyecto manualmente.
  2. git rm todos los archivos.
  3. git cometer como normal.
  4. agrega los archivos manualmente
  5. git añadir todos los archivos.
  6. git cometer como normal.
  7. lucro.