2010-05-26 10 views
7

En ClearCase el mal gemelo ocurre cuando dos archivos se encuentran con el mismo nombre en dos versiones diferentes del directorio, y si los OID del elemento son diferentes pero los nombres son los mismos.¿Tiene GIT problemas gemelos malvados?

En GIT, la identificación SHA1 siempre es única y los archivos con el mismo nombre siempre tienen diferentes identificadores SHA1.

No tenemos un concepto de gemelos Evil, pero es probable que haya dos o más desarrolladores que creen un archivo con diferentes contenidos con el mismo nombre de archivo en el mismo directorio. Durante la fusión, cuando ambos archivos son completamente diferentes, hay posibilidades de que los desarrolladores mantengan sus cambios solos y dejen otros cambios que resulten en la pérdida del código.

¿Alguien me puede decir si habrá problemas en GIT similares a ClearCase o sine cada identificación de SHA1 es única? No habrá ningún problema gemelo malvado en GIT.

+0

Tu perfil dice: "ClearCase Admin Researching on GIT"? ¡Estoy haciendo lo mismo! ;) – VonC

+0

:) He estado en ClearCase durante los últimos 3.5 años y ahora estamos migrando de CC a GIT. Así que he estado probando varias opciones en GIT y comprobando si los problemas en CC ocurren en GIt o no. Y, sus respuestas a la mayoría de las preguntas fueron realmente útiles, muchas gracias. –

+0

"ahora estamos migrando de CC a GIT" Tienes tanta suerte. Estoy tratando de colar a Git en mi compañía también. Después de más de 8 años de ClearCase y Subversion (y ocasionalmente Perforce o CM Synergy), esto es refrescante;) – VonC

Respuesta

7

Git realiza el seguimiento en el nivel de todo el árbol, no en archivos y directorios individuales, por lo que no tiene un concepto como un OID.

Al fusionar historiales que incluyen cambios incompatibles en un archivo (por ejemplo, ambos agregaron un nuevo archivo con diferentes contenidos), Git generará un conflicto de combinación y se detendrá para permitir que el usuario resuelva el conflicto o aborte la fusión.

Por supuesto, Git no puede obligar al usuario a hacer la fusión, hacer lo correcto, pero quizás sea más difícil ignorar por completo un lado del conflicto. En Git, el conflicto estará en el archivo en sí, no en el directorio que contiene el archivo. En otras palabras, el conflicto será sobre el contenido del archivo en lugar de qué OID se debe vincular en el directorio.Por supuesto, dependiendo de la herramienta utilizada, el usuario puede simplemente presionar "tomar mi lado en todos los conflictos", pero a Git no le importará en lo más mínimo (¡aunque al jefe y compañeros de trabajo del patán perezoso les puede importar mucho!).

0

Oh errores gemelos malvados, eso me lleva de vuelta. No, no deberías tener tales errores en git. Git no rastrea realmente todo el archivo, ya que rastrea fragmentos de archivos.

+0

Git realmente rastrea todo el archivo (en la representación de datos del repositorio). Sin embargo, las herramientas creadas en el repositorio son libres de aparecer como si rastreara fragmentos (si así lo desean). –

+1

Eche un vistazo al libro de comunidad de git (http://book.git-scm.com/1_the_git_object_model.html) o Pro Git (http://progit.org/book/ch9-2.html) para ver lo que Greg hablando sobre. Git realmente rastrea archivos completos o, si lo prefiere, el contenido de archivos completos. – Cascabel

3

No, pero hay un detached head. Lo siento, no pude evitarlo :)

Lo que sucedería es que el archivo aparecerá como conflictivo cuando el segundo desarrollador lo retire antes de hacer un push. Cuando los archivos son completamente diferentes, será evidente que deben tener diferentes nombres de archivo. El segundo desarrollador hará algo al respecto (es decir, cambiará el nombre de su archivo para que no haya conflicto).

3

Sí, hay algún tipo de operación "mal" en Git, pero no por la misma razón que el evil twins of ClearCase:

Se llaman evil merge:

una combinación que introduce cambios que no aparecen en ningún padre

es decir: poner las cosas en el código que nadie pidió que estar allí, llamada 'fusión mal', ya que es difícil para el caso esquina "culpa git" para resolver cuando se anota archivo.
Esas fusiones generalmente están relacionadas con un semantic conflict entre las dos fusiones de versiones (y no un simple conflicto de texto).
Un efecto secundario será que, en lugar de añadir, eliminar o modificar una línea cambió, se termina con las dos líneas , (de las dos versiones que se pueden fusionar) en el resultado de la fusión ...

+0

Bueno, como he comentado [allí] (http://stackoverflow.com/q/1461909/85371) no es tanto un fenómeno de Git; más bien una manera desacertada de trabajar con Git. ¡Git tiene mucho poder para permitirte hacer cosas que la mayoría de las veces no debes! – sehe

Cuestiones relacionadas