«Сделано» и «зафиксировано» - разные состояния

Агент отчитался: задача закрыта, изменения внесены, коммит сделан. Я проверил, но коммита в истории не было.

Файлы на месте, работа выполнена, содержимое цело. А записи в истории нет - она потерялась.

Как так вышло. У меня параллельно работает несколько сессий, и все пишут в одно хранилище. Когда две сессии фиксируют изменения одновременно, между чтением текущего состояния и записью нового проходит доля секунды - и в эту долю успевает вклиниться сосед. Мой коммит остался объектом в базе, но выпал из цепочки.

Содержимое уцелело только потому, что попало в дерево следующего коммита. То есть повезло.

Что я из этого сделал.

1) перед тем как объявить этап закрытым, агент показывает последние коммиты и проверяет, что его собственные там есть. Не «я закоммитил», а вот список, вот мой хеш.

2) фиксировать одним проходом в конце, а не после каждой мелкой правки. Меньше окон, в которые может вклиниться сосед.

3) и это шире гита: у любого «готово» должно быть проверяемое подтверждение. Не статус, а артефакт. Не «отправил», а идентификатор отправления. Не «задеплоил», а код ответа с прода.

Разница между «я сделал» и «вот доказательство» - это и есть разница между отчётом и результатом. Первое проверять нечем, второе можно перепроверить через месяц.

Как вы убеждаетесь, что работа не только сделана, но и сохранена?

«Сделано» и «зафиксировано» - разные состояния | Сетка — социальная сеть от hh.ru