git merge falla con "file de tree de trabajo sin seguimiento" en caso de cambio

En Mac OS X, tengo dos twigs, por ejemplo A y B, y quiero unir A en B. Cuando bash hacer git merge A en B, obtengo:

 error: Untracked working tree file 'path/file.php' would be overwritten by merge. Aborting 

Esto se debe al hecho de que algunos cambios en A cambiaron el nombre del file, es decir, B tiene una path/File.php file path/File.php mientras que A lo ha cambiado a path/file.php . Dado que el sistema de files Mac OS X es insensible a las mayúsculas y minúsculas, esto probablemente confunde a git. ¿Hay alguna manera de hacer que Git haga la fusión correctamente?

Actualización: para aclaración, la twig B no tiene ningún cambio no confirmado y el file en cuestión se rastrea en ambas twigs (bajo diferentes nombres, por supuesto).

Solutions Collecting From Web of "git merge falla con "file de tree de trabajo sin seguimiento" en caso de cambio"

Quizás esta respuesta a otra pregunta sea útil; es posible que solo quiera habilitar la opción temporalmente …

git mv y solo cambia caso de directory

OK, después de cavar todo el día, aquí está la solución que encontré:

========== La situación ==========

Estoy desarrollando en mi twig "Hotdog"

Mi compañero de trabajo empujó su trabajo a nuestra twig principal, incluido un file llamado "Hamburgersrule"

Fundí maestro en mi twig Hotdog.

Mi compañero de trabajo cambia "Hamburgersrule" a "HamburgersRule", y lo empuja a dominar.

========== El problema ==========

Cuando bash cambiar entre Hotdog y Master, Git piensa que se han producido algunos cambios. El caso de HamburgersRule se ve diferente a Git, pero Windows cree que está bien. Cada vez que trato de fusionarme o reviso otra sucursal, Git me advierte que perderé mis files no registrados.

Puedo suprimir el post estableciendo git config core.ignorecase cierto, pero el problema subyacente sigue ahí, e ignorar las diferencias entre mayúsculas y minúsculas es lo que nos metió en este lío en primer lugar.

========== La solución ==========

1: Realice un cambio de nombre triple en el maestro (para asegurarse de que el nuevo nombre de file sea correcto) HamburgersRule -> HamburgersRule_Rename -> HamburgersRule

2: Combina ese cambio en Hotdog Branch. Para que la combinación funcione, tendrás que eliminar tu versión de "Hamburgersrule" (usando tu sistema operativo, no git)

3: Limpie los files restantes en Hotdog. Verifique si la fusión funcionó como se esperaba. Es posible que tengas que pagar HamburgersRule de la sucursal Master:

git checkout master HamburgersRule

EDITAR: nota importante. Si no quiere seguir solucionando este problema una y otra vez, asegúrese de que todos sus compañeros de trabajo tengan ignorado el set configurado como falso.

git config core.ignorecase false

Si alguien ignora la distinción entre mayúsculas y minúsculas, su cliente de git ignorará los cambios y seguirá revisando el nombre incorrecto.

Al iniciar git 2.0.1 (25 de junio de 2014), esa fusión ya no fallará.

Consulte commit ae352c7f37ef2098e03ee86bc7fd75b210b17683 por David Turner ( dturner-tw )

merge-recursive.c : corregir el error de fusión que cambia las mayúsculas y minúsculas

En un sistema de files que no distingue entre mayúsculas y minúsculas, al fusionarse, un file se eliminaría erróneamente del tree de trabajo si una confirmación entrante lo hubiera renombrado cambiando solo su caso.
Al fusionar un cambio de nombre, se eliminará el file con el nombre anterior, pero dado que el sistema de files considera que el nombre antiguo es el mismo que el nuevo, de hecho, se eliminará el nuevo.

Evitamos esto al no eliminar los files que tienen una clonación de caso en el índice en la etapa 0.

¿Qué tal si haces un git mv path/File.php path/file.php en B ? Esto debería permitirle a git saber que es el mismo file con un nombre diferente.