Зависит ли время выполнения git от размера файла?Кроме того, сколько времени требуется для восстановления предыдущей версии в git? - PullRequest
0 голосов
/ 21 февраля 2019

Существует ли фиксированный интервал времени для выполнения git commit, или это зависит от файла, который мы фиксируем?Кроме того, сколько времени занимает git для восстановления предыдущей версии?

1 Ответ

0 голосов
/ 21 февраля 2019

Команда git commit записывает некоторое количество объектов tree и одного объекта commit , а затем сохраняет хеш-идентификатор одного объекта фиксации в текущей ветви.Набор древовидных объектов определяется содержимым индекса .Вы можете просмотреть это содержимое напрямую, используя git ls-files --stage.

Время, необходимое для записи каждого из этих объектов, обычно довольно мало, поэтому в большинстве случаев git commit почти мгновенно.Количество необходимых объектов дерева зависит от количества поддеревьев, необходимых для содержимого индекса.Это сложнее посчитать легко.Изучение количества косых черт в именах файлов в индексе - это начало, но если индекс содержит файлы a/b, a/c и т. Д. До a/z, это всего лишь одно поддерево (для a/) длявсе эти файлы.Если индекс содержит a/b/c и a/c/d, есть одно поддерево для b/ и одно для c/ без a/, плюс дерево для a/, что составляет три дерева.Так что просто подсчет косых черт завышает, иногда дико, в зависимости от того, насколько хорошо заполнено каждое поддерево.

Обратите внимание, что сами файлы уже хранятся в сжатом формате Git-only во время запуска git commit.Если вы посмотрите на вывод git ls-files --stage, вы увидите большой некрасивый хеш-идентификатор для каждого файла.Этот хэш-идентификатор представляет объект blob , в котором уже хранится содержимое файлов в хранилище.Команда git commit просто ссылается на существующего содержимого: нет необходимости записывать новый файл.

(Время, необходимое для копирования файла из репозитория из его специальногосжатая форма Git-only к обычной форме на диске примерно пропорциональна размеру файла Время, затрачиваемое на копирование файла из обычной формы на диске в хранилище, во время git add, также примерно пропорционально размеру файлаНо однажды фиксирует файл очень быстро. Переключение на другой коммит, имеющий ту же версию файла, не занимает много времени, так как Git замечает, что файл в индексе и в рабочем дереве соответствуетфайл в целевом коммите. Переключение на коммит, который имеет другую версию файла, требует извлечения файла из коммита и индекса в рабочее дерево, переходя в «копию из репозитория в обычный»форма "кейс".

...