¿Es seguro si se ejecutan más commands git en el mismo repository en paralelo?

Me interesa si es seguro ejecutar cosas como git push y git commit en paralelo (por ejemplo, en trabajos cron, trabajos de jenkins, etc.). ¿Hay algún mecanismo de locking incorporado en git para que estas operaciones se serialicen o esto pueda dañar el repository?

Sí. Git trabaja escribiendo references de una manera que permite esto. Si está haciendo un commit al mismo time que un push, push solo irá desde las references hasta los objects que contienen. Si la confirmación finaliza y actualiza la reference de la sucursal a time, se presionará. Si no lo hace, la antigua reference será presionada. No obtendrás "medio compromiso".

Todos los files están escritos de una manera que implícitamente preserva la integridad referencel para cualquier puntero. El último file escrito será la reference que ya tiene todas sus dependencies allí.

En teoría, podría haber un caso raro de condición de carrera para la parte de git commit , donde el file HEAD no está disponible.
Eso fue silencioso antes de Git 2.15.x / 2.16 (Q1 2018). Ya no estará en silencio.

Ver commit c26de08 (20 de octubre de 2017) por Andrey Okoshkin (“) .
(Fusionado por Junio ​​C Hamano – gitster – en commit 4a1638c , 06 nov 2017)

commit : comprobar el resultado de resolve_ref_unsafe

Agregue el control de la reference HEAD resuelta mientras imprime un resumen de compromiso.
resolve_ref_unsafe() puede devolver el puntero NULL si lstat() las llamadas subyacentes de lstat() o open() en files_read_raw_ref() .
Tal situación puede ser causada por la raza: el file se vuelve inaccesible en este momento.

El post se convierte en:

 if (!head) die_errno(_("unable to resolve HEAD after creating commit"));