- Можно ли параллельно запускать несколько команд только для чтения ...
Да.К сожалению, список команд, которые на самом деле доступны только для чтения, удивляет: в частности, git status
не входит в их число.Точнее, git status
только для чтения, если вы запускаете git --no-optional-locks status
.(Все команды могут быть выполнены таким образом, хотя --no-optional-locks
влияет только на необязательные блокировки в любом случае, поэтому ничего не делает для других команд.)
Действительно ли они будут выполняться одновременно (т. Е. Существует ли внутренняя блокировка, сериализующая доступ)?
В основном, но см. (1).
Что делать, если выполняется модифицирующая команда?Будет ли он сериализован должным образом?
Определить "правильно".
Команды, которые вносят изменения, блокируют друг друга, но команды, которые сталкиваются с проблемами блокировки, как правило, обязательно .Таким образом, если две команды Git пытаются получить index.lock
для обновления индекса, одна выигрывает и продолжает, другая проигрывает и полностью завершается.Это "правильно"?Репозиторий остается без изменений, но одна из команд действительно никогда не выполнялась.
Операции, доступные только для чтения, обычно видят либо состояние «до», либо состояние «после», но у них есть потенциал, чтобы их увидетьсмешанное состояние.Например, git log
может считывать шесть имен ссылок последовательно, в то время как некоторые другие команды обновляют некоторые из них.В этом случае git log
может получить одно или несколько «старых» значений и одно или несколько «новых» значений для каждого ссылочного имени.