2012-03-30 12 views
10

Tengo un proyecto que se inició en TFS, luego se movió a Git. Desafortunadamente, el chico que lo movió a Git acaba de verificar los archivos actuales en lugar de usar git-tfs. Estoy tratando de volver a establecer las bases de sus nuevos commits en Git además de los commits que hice de TFS usando git-tfs.¿Por qué git muestra un conflicto entre dos archivos agregados aparentemente idénticos?

Para hacer esto, simplemente estoy rehaciendo sus compromisos sobre los commits de git-tfs. (Me doy cuenta de que esto arruinará las sucursales remotas de Git, pero somos un equipo pequeño y todo irá bien. También intenté seleccionar las cerezas, pero acerté con el mismo problema.)

El problema es ' estoy corriendo en una serie de conflictos que se parece a esto:

<<<<<<< HEAD 
namespace OurNiftyProject 
{ 
    public enum CardType 
    { 
     Visa = 0, 
     MasterCard = 1 
    } 
} 
||||||| merged common ancestors 
======= 
namespace OurNiftyProject 
{ 
    public enum CardType 
    { 
     Visa = 0, 
     MasterCard = 1 
    } 
} 
>>>>>>> Add a bunch of stuff. 

parece que este es un conflicto entre una confirmación desde el lado de TFS que agrega estos archivos, y una confirmación en el lado Git que les añade (como el repositorio de Git comenzó vacío).

Lo lógico sería omitir esta confirmación, tal vez, pero hay algunos archivos (por ejemplo, diez de un par de cientos) que son nuevos. Esos no causan conflictos, por supuesto.

¿Por qué Git no puede darse cuenta de que los dos archivos son idénticos? Incluso si uso --ignore-whitespace cuando rebase, Git todavía muestra docenas de archivos como este que parecen ser idénticos. No sé cómo resolver esto.

+0

¿'diff' te da una diferencia también? – Reactormonk

+4

¿Podrían ser diferencias de final de línea? – ebneter

+0

Espacios en blanco que se arrastran quizás –

Respuesta

9

Debe tratarse de diferencias de final de línea, como ebneter comentarios.
que ya han detallado hace mucho tiempo cómo git merge no era bueno en ignorar esas diferencias (en contraposición a los espacios en blanco diferencias):
"Is it possible for git-merge to ignore line-ending differences?"

Por eso es necesaria una política de conversión EOL consistente para aquellos repositorios en ambiente heterogéneo.
Ver "Distributing git configuration with the code".

+0

¿Git realmente considera las diferencias de terminación de línea distintas de las diferencias de espacio en blanco? ¡Pensé que las terminaciones de línea * eran * espacios en blanco! –

+0

@Kyralessa: no exactamente. http://gitster.livejournal.com/28862.html menciona 'cr-at-eol': con' trailing-space', no se activa si el carácter anterior a dicho retorno de carro no es un espacio en blanco, pero * no está activado de manera predeterminada *. – VonC

5

Estoy haciendo algo similar y acabo de enterarme de "-X ignore-space-at-eol". Está disponible tanto para fusión como para rebase. Parece estar haciendo lo correcto pero hace que la muerte sea lenta para mí.

+1

Tal vez encontraron una aceleración, porque para mí, agregar la bandera no me ralentiza. git versión 1.9.5.msysgit.0 – AnneTheAgile

1

Acabo de tropezar con este problema, seguido por este post solo para darme cuenta de que también es un escenario de final de línea.

Así que, FWIW, esto sucedió en mi caso porque solía tener "Usar terminaciones de línea de Windows", pero en algún momento, para un proyecto diferente, lo reconfiguré a "Usar terminaciones de línea de estilo Unix" (estas configuraciones son disponible desde el programa de instalación de Git).

Volviendo a "finales de línea de estilo Uso de Windows" resuelto el problema sin utilizar "--ignore un espacio en blanco"

1

Si se puede descartar cambios invisibles debido a diferentes finales de línea, es posible que desee comprobar si los archivos tienen diferentes modos (por ejemplo, si el bit ejecutable está configurado). Git muestra el archivo completo en un diff cuando el modo de archivo cambió.

Cuestiones relacionadas