2013-07-09 4 views
3

Я знаю, что git будет медленнее, когда репо станет больше.
Но почему?
Как git хранит файлы как отдельные каталоги и файлы под .git, я не могу узнать, почему операции становятся медленнее. Давайте посмотрим на операцию commit. В последнее время я клонировал ретрансляцию webkit и я от ведущего, а затем передал в ветвь файл 2k. Но я чувствую, что это становится медленнее, чем то, что я делаю на своем небольшом репо.
Поскольку я не прочитал исходный код git, я предполагаю, что операция фиксации ставит под угрозу сохранение файла на диске, вставку журнала фиксации, обновление индекса и обновление HEAD до значения sha файла.Почему git-операции становятся медленными, когда репо становится все больше

Письмо быстро.
Вставка выполняется быстро. (Думаю, если действие вставки добавляется в файл в файл)
Индекс обновления быстрый.
Обновление HEAD происходит быстро.

И почему это медленно? Кто-нибудь может это проиллюстрировать мне?
Спасибо.

Некоторые ответы полезны, но не очень убедительны, будет полезно предоставить некоторые фрагменты кода, которые помогут вам.

ответ

4

Задание дерева должно быть постоянным во времени, так как ему нужно только создать новый объект фиксации (git write-tree) и обновить ссылку HEAD.

я сделал тесты различных SCMs в прошлом и git commit действительно не зависит от размера дерева, размер хранилища, длина истории и т.д.

+0

Поскольку совершение ID является SHA-1 из снимка текущего хранилища, она не может быть постоянным. – Tordek

+3

Идентификатор фиксации - это SHA1 содержимого объектов фиксации. Содержимое включает в себя хеш-маркер (ов) SHA1 родителя, хеш дерева (сгенерированный во время 'git add') и текст сообщения фиксации. Если у вас нет сообщения о безумно долгое, это не имеет значения. – knittl

+0

Я вижу. Купите, вы все еще хешируете все дерево во время операции 'add'. Если исходный ответ явно не избегает этого шага, он все равно должен быть релевантным. – Tordek

Смежные вопросы