Si bien encontré una pregunta 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
OKAY. Así que intentogit mv FOO foo2 && git mv foo2 foo
Pero cuando trato de comprometerme git commit .
, 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 vuelve a dar el mismo mensaje.
¿Qué estoy haciendo mal? Pensé que estaba usando un sistema que distingue entre mayúsculas y minúsculas (OSX), ¿por qué no puedo simplemente cambiar el nombre del directorio?
macos
git
version-control
case-sensitive
oschrenk
fuente
fuente
git mv
funciona.git mv foo Foo
si usa un shell cygwin.Respuestas:
Estás en un entorno que no distingue entre mayúsculas y minúsculas. Además, agregar sin el
-A
no se ocupará del lado de eliminarmv
como lo entiende Git. ¡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 luegogit stash pop
después. Continuando: Para evitar esto, haga lo siguiente:Esa es la forma extraída de cambiar el directorio de trabajo, confirmar y luego contraer las 2 confirmaciones. Puede simplemente mover el archivo en el índice, pero para alguien que sea 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
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 incorrecto hace 5 confirmaciones) para arreglar el caso allí y no que aparezca el caso incorrecto en ningún lugar del historial. Debe tener cuidado si hace esto, ya que los hashes de confirmación a partir de ese momento serán diferentes y otros tendrán que reajustar o fusionar su trabajo con el pasado reciente de la rama.Esto está relacionado con la corrección del nombre de un archivo: ¿git no distingue entre mayúsculas y minúsculas?
fuente
git add foo2
.-A
se ocupa de ambos. Viceversa para el primer paso. Agregaré la advertencia. ¡Gracias!git rebase -i HEAD~2
. Nota: Para simplificar esto, configure el mensaje final en su primera confirmación y arregle la segunda.Desea establecer la opción
core.ignorecase
en falso, 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:Luego, puede cambiar el nombre del archivo con
git mv
y funcionará como se esperaba.fuente
I modified a file that doesn't exist
.. hrmerror: The following untracked working tree files would be overwritten by checkout:
pero ... esos archivos no existen.Pude resolver esto, usando git 1.7.7 usando un nombre de archivo temporal:
fuente
(
git mv
-Variante libre.)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 prepara 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, se muestre en archivos sin seguimiento.Entonces puedes hacer esto:
Git reconocerá que ha cambiado el nombre de los archivos y, cuando lo haga
git status
, debería ver una serie derenamed:
líneas. Inspeccione y asegúrese de que se vean correctos, y si es así, puede confirmar los cambios normalmente.fuente
mv
comando no funcionaba para cambiar el nombre del directorio; Tuve que cambiarle el nombre dentro de Finder. Aparte de eso, esta solución funciona perfectamente.Esta es una solución rápida y segura contra errores:
¡Advertencia! Cambie siempre el nombre de todos los archivos en la carpeta renombrada (usar
/*
).No cambie el nombre de archivos individuales. Esto conduce a un error, que se describe en esta respuesta .
Si primero desea ver el resultado primero, use
-n
:Después de haber hecho un
mv
:Ahora Git debería haber cambiado el nombre de la carpeta TANTO en sus archivos internos como en el sistema de archivos.
fuente
Forzarlo con la opción -f:
fuente
false
, funcionó para mí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.
la configuración de git cambia 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 ramas a menos que lleve esos archivos conmigo, y tampoco pude restablecerlos de alguna manera.
En lugar de eso, lo hice
Para que sea más seguro, lo hice en una rama de reparación separada, y luego me fusioné con la rama principal
Para el problema del archivo fantasma creado por, ¿algún gurú puede explicar cómo y por qué? Gracias por adelantado.
fuente
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.
fuente
Aquí hay una solución realmente simple para todo el gitfoo en esta página.
fuente
Al mejorar la respuesta de Adam Dymitruk (es una tontería que SO no me deje comentar su respuesta), el uso de "git mv" pondrá automáticamente en escena exactamente los archivos movidos. No se necesita ocultar y se puede evitar el arriesgado "git add -A":
fuente
Esto funcionó muy bien para mí en Windows. Powershell usado con lo siguiente:
mv .\Folder-With-Wrong-Casing .\temp
git add -A
git commit -m "renamed folder with wrong casing to temp"
mv .\temp .\Folder-with-Correct-Casing
git add -A
git commit --amend -m "Renamed to proper casing"
git push
Gracias a la respuesta de Adam anterior.
fuente