git mv y solo cambia caso de directory

Mientras encontré una pregunta similar, no encontré una respuesta a mi problema

Cuando trato de cambiar el nombre del directory de FOO a foo a través de git mv FOO foo me sale

 fatal: renaming 'FOO' failed: Invalid argument 

DE ACUERDO. Entonces bash git mv FOO foo2 && git mv foo2 foo

Pero cuando bash comprometerme a través de 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 directory a través de git add foo nada cambia y git commit . me da el mismo post nuevamente

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

Estás en un entorno insensible a mayúsculas y minúsculas. Además, agregar sin -A no se ocupará del lado de eliminación del mv ya que Git lo comprende. ¡Advertencia! ¡Asegúrese de que no haya otros cambios o files sin seguimiento cuando haga esto o se comprometerán como parte de este cambio! git stash -u primero, haz esto y luego git stash pop después. Continuación: para evitar 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 más extensa de cambiar el directory de trabajo, confirmando y luego contrayendo los 2 commits. Puedes simplemente mover el file en el índice, pero para alguien que es nuevo en git, puede no ser lo suficientemente explícito como para 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 incorrecto hace 5 commits) para arreglar el caso allí y no mostrar el caso incorrecto en ninguna parte de la historia en todas. Tienes que tener cuidado si haces esto ya que los hashes de confirmación a partir de ese momento serán diferentes y otros tendrán que volver a establecer la base o volver a fusionar su trabajo con ese pasado reciente de la twig.

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

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

 $ git config core.ignorecase false 

Luego puede cambiar el nombre del file con git mv y funcionará como se espera.

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

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

Forzarlo con la opción -f:

 git mv -f FOO foo 

( 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 etapas el directory para su eliminación en Git, pero en realidad no elimina ningún file físico ( --cached ). Esto también hace que el directory, ahora con el caso adecuado, aparezca en los files sin seguimiento.

Entonces puedes hacer esto:

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

Git reconocerá que ha cambiado el nombre de los files y, cuando lo haga, verá varias líneas renamed: . Inspeccione y asegúrese de que se vean correctos, y si es así, puede confirmar los cambios normalmente.

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

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

¡Advertencia! Siempre cambie el nombre de todos los files en la carpeta renombrada (use /* ).

No cambie el nombre de los files individuales. Esto lleva a un error, descrito en esta respuesta .

Si primero quiere ver el resultado primero, use -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. Pagar de vuelta

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

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

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

  1. Copie los files de su proyecto manualmente.
  2. git rm todos los files.
  3. git se compromete como siempre.
  4. vuelve a agregar los files de forma manual.
  5. git agrega todos los files.
  6. git se compromete como siempre.
  7. lucro.

Mejorando la respuesta de Adam Dymitruk (tonto que SO no me deja comentar su respuesta), usar "git mv" automáticamente representará exactamente los files movidos. No es necesario esconderse y se puede evitar el arriesgado "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'."; 

Tenía un problema relacionado.

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

 $ git config core.ignorecase false 

la configuration de git cambia el nombre de los files a la carpeta correcta (gracias), y también creó files fantasmas en 'pro' (No !!). No pude agregar cambios de files fantasma a la pista y no pude verificar otras twigs a less que llevé esos files 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 twig de características, y luego me fusioné nuevamente a la twig principal

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

    Intereting Posts