Git gc o podar simultáneamente con recibir

Git gc o podar simultáneamente con recibir

Hay dos anfitriones A y B.

A sirve a Git y recibe revoluciones impulsadas por B.

B sólo empuja y nunca recibe, a menos que tire por sí mismo.

Se puede configurar B en GC o podar las revoluciones porque no hay temor a operaciones simultáneas; sin embargo, ¿puede B empujar las revoluciones a A mientras A está GCing o podando? ¿Lo que sucede?

Básicamente, quiero saber si debo desactivar las comunicaciones de A cuando ejecuto GC o pods, o si no es necesario.

Respuesta1

Git GCpágina de manualestado:

Si git gc se ejecuta simultáneamente con otro proceso, existe el riesgo de que elimine un objeto que el otro proceso está utilizando pero al que no ha creado una referencia. Esto puede simplemente provocar que el otro proceso falle o dañar el repositorio si el otro proceso luego agrega una referencia al objeto eliminado. Git tiene dos características que mitigan significativamente este problema:

  1. Cualquier objeto con una hora de modificación posterior a la fecha de --prune se conserva, junto con todo lo accesible desde él.

  2. La mayoría de las operaciones que agregan un objeto a la base de datos actualizan la hora de modificación del objeto si ya está presente, de modo que se aplica el n.° 1.

Sin embargo, estas características no llegan a ser una solución completa, por lo que los usuarios que ejecutan comandos simultáneamente tienen que vivir con cierto riesgo de corrupción (que parece ser bajo en la práctica).

Y además:

--prune=<date>

Pode los objetos sueltos anteriores a la fecha (el valor predeterminado es hace 2 semanas, anulable por la variable de configuración gc.pruneExpire). --prune=nowpoda los objetos sueltos independientemente de su antigüedad y aumenta el riesgo de corrupción si otro proceso escribe en el repositorio al mismo tiempo; consulte "NOTAS" a continuación. --prune está activado de forma predeterminada.

Entonces sí, existe un riesgo. Sin embargo, si los relojes de A y B están bastante sincronizados y los comandos de Git que aplica al repositorio no tardan más de dos semanas en completarse, consideraría el riesgo de enviar y realizar GC simultáneamente en el mismo repositorio. aceptable.

información relacionada