2016-03-28 6 views
3

Я изучаю «дерево» и «индекс» от этого aritcle: Learning Git Internals by ExampleВ чем разница между «-tree-filter» и «-index-filter» в «git filter-branch»?

, но когда он приходит к «мерзавца фильтр-ветви» команда, я не знаю, в чем разница между «--tree-фильтром "и" --index-filter ".

+0

Вы прочитали [документацию] (https://git-scm.com/docs/git-filter-branch)? –

+1

@TimBiegeleisen Я знаю, но я считаю, что эти концепции Git трудно понять ... – GoTop

ответ

7

Короткий вариант заключается в том, что --tree-filter проверяет каждую фиксацию во временном каталоге, запускает вашу команду фильтра и создает новую фиксацию из того, что теперь находится во временном каталоге; в то время как --index-filter копирует каждую фиксацию в индекс, запускает команду фильтра и строит новую фиксацию из того, что теперь находится в индексе.

Копирование фиксации к индексу значительно быстрее, чем проверка фиксации. Создание фиксации из индекса происходит быстрее, чем создание фиксации из каталога. В результате использование индексного фильтра намного быстрее, чем использование фильтра дерева. Тем не менее, это не так просто.


Разница точная скорость зависит от вашей временной директории: файл системы в памяти происходит быстрее, чем в файловой системе на-SSD, который быстрее, чем на спиннинг-медиа, так что вы получите больше, если вы используете прядильные носители, чем если бы вы могли указать фильтр дерева на файловую систему в памяти. Но даже тогда индексный фильтр еще быстрее.

На реальных дисках я видел около 100 или около того (следовательно, индексный фильтр, который занимает 2 минуты, преобразуется в фильтр дерева, который занимает 3 часа).

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