tipos tag remove qué existen etiquetas crear git

tag - qué tipos de etiquetas existen en git



Cómo funciona git cuando dos compañeros empujan los cambios al mismo control remoto simultáneamente (1)

Respuesta corta

Sí, uno de los empujes será rechazado, el que sea posterior, incluso si es solo por un microsegundo, como lo menciona Jefromi en su comentario. Sin embargo, será rechazado porque el repositorio remoto ve que el historial del último envío no incluye el historial del anterior, en lugar de porque ve algún conflicto en el contenido que se está presionando.

Respuesta mas detallada

Por lo general, un impulso será rechazado si no "avanza" la rama, en la terminología de Git. Esto significa que si su maestro está en A y los repositorios remotos están en B, entonces el empuje solo tendrá éxito si B es un antepasado de A. (Digo "generalmente" porque puede agregar opciones para "forzar" el empuje si el El repositorio remoto lo permite, pero ese no es el caso típico.

En el caso que usted describe, suponiendo que los tres repositorios inicialmente tienen el mismo historial:

P -- Q -- R

Y has añadido un commit S:

P -- Q -- R -- S

... mientras que alguien más ha agregado un commit T:

P -- Q -- R -- T

Si esa otra persona llega primero cuando empuja (es decir, Git en el servidor se encarga de su empuje primero), entonces se aceptará su empuje porque R es un antepasado de T , por lo que el repositorio remoto también tendrá el historial P -- Q -- R -- T Si posteriormente intenta presionar, recibirá un error porque T no es un antepasado de S Típicamente, al ver eso ! [rejected] error ! [rejected] ejecutará git pull o git pull --rebase para asegurarse de que está delante del maestro en el repositorio remoto.

git pull creará una confirmación de fusión M para que su historial se vea como:

P -- Q -- R -- T -- M / / -- S -

... mientras git pull --rebase volverá a aplicar los cambios que introdujo en la parte superior de T para crear un nuevo commit, S'' :

P -- Q -- R -- T -- S''

En cualquiera de esos casos, deberías poder presionar de nuevo, porque T es un antepasado tanto de M como de S'' . (¡Suponiendo que nadie más haya empujado otra vez en el tiempo!)

Al solo permitir los reenvíos rápidos nunca tiene que haber resolución de conflictos en el lado remoto: si hay algún conflicto, se le pedirá que los resuelva localmente cuando ejecute git pull .

Podría valer la pena señalar que la actualización aplicada al repositorio remoto en respuesta a un impulso es atómica, por lo que en la situación de ejemplo que describimos anteriormente donde S y T se están presionando al mismo tiempo, siempre será el caso que Uno de ellos se aplica completamente, mientras que el otro fallará y no tendrá efecto.

Una nota sobre su punto clave / valor de almacén

Si bien la base de datos de objetos de Git se implementa como un almacén de clave / valor, que asigna nombres de objetos (también conocidos como hashes o SHA1sums) al contenido de los objetos, en mi experiencia, es fácil para las personas que aprenden a Git hacer suposiciones confusas sobre cómo se comporta Git cuando escuchan "es como una tienda de valor clave"; parece que esto podría estar sucediendo en su caso, por lo que sugeriría que pensar en Git a ese nivel no es el enfoque más útil para comprender este problema.

Soy nuevo en git, por lo general uso P4, que tiene un repositorio central, mientras que git se distribuye VCS.

Estoy interesado en cómo funciona git cuando dos pares empujan los cambios al mismo control remoto simultáneamente. Supongamos que cada par resolvió todos los conflictos antes de empujar. ¡Supongo que el último será rechazado si git informa de conflictos!

Sin embargo, por lo que entiendo, git es internamente un almacén de clave / valor, muy parecido a la popular base de datos NOSQL actual, especialmente Couch-DB que admite la replicación p2p.

En realidad, quiero preguntar, ¿cómo git procesa los conflictos en el caso de que los clientes envíen cambios al repositorio remoto de git? ¿El empuje es rechazado?

De la respuesta de Mark, creo que el empujón debería ser rechazado.