Ответ 1
Статья статьи главного конструктора Git Юнио С. Хамано является поучительной для понимания разницы между кешем и индексом:
(акцент мой)
Когда Линус начал писать git, его цель состояла в том, чтобы разрешить ему воспроизводить каждое промежуточное состояние, созданное его оригинальным рабочим процессом "tarball и patches", которое он использовал до дней BitKeeper.
Начиная с 2.6.12 tarball, он ставит в очередь патч-1, patch-2,... так что 2.6.12 сам по себе, 2.6.12 с применением исправления-1, 2.6.12 с применением патчей-1 и patch-2, становятся тремя версиями.Но это не будет явно масштабироваться, если вам нужно перетасовать сотни патчей в день. Поэтому он изобрел "кеш директории"; как понятие, это примерно соответствует "древовидным" объектам сегодня git: набор записей, каждый из которых представляет собой компактное представление того, что содержит целая структура каталога.
Способ его создания состоял в том, чтобы "добавить содержимое в кэш или обновить содержимое в кеше".Управляющий каталог для размещения коллекции таких записей управления версиями был назван "
.dircache
" (через некоторое время он был переименован в ".git
" ).
Был файл с именем ".dircache/index
", и содержимое этого файла было прочитано и обработано в наборе переменных в C, которые были названы в имени существительного "cache
".
Тогда концепция того, что мы сегодня называем индексом, область буфера для создания коллекции содержимого, которую вы намереваетесь выписать как объект дерева, называлась "кешем" .
Все говорили об "кеше" и "индексе" взаимозаменяемо, поскольку файл, который записывает то, что находится в "cache
", был назван "index
". Это был (и по-прежнему) индекс , чтобы вы могли найти содержимое в кеше, указав ему путь.Поскольку все больше и больше людей начали использовать Git без необходимости читать свой код вообще, использование слова "индекс" стало более распространенным по очевидным причинам.
Как что-то, что находится в файловой системе, оно гораздо более заметно, чем имя переменной в исходном коде C.
В конце концов, мы перестали использовать "кеш" в качестве имени, чтобы назвать то, что мы называем "индексом" сегодня, когда объясняем использование Git в качестве конечного пользователя.
Слово "кеш" , однако, по-прежнему используется как существительное, когда мы хотим поговорить о внутренней структуре данных в контексте обсуждения Git реализации (например, "Дайте возможность программам работать с более одного кеша одновременно" ).На уровне конечного пользователя "кеш" используется только в качестве прилагательного в наши дни; "кэшируется", что означает "содержимое кэшируется в индексе, а не содержимое в дереве работ".
Мы могли бы назвать его "индексированным", но "кешированное содержимое" было уже установленной фразой с самых ранних дней, чтобы означать эту точную концепцию, и нам не нужно было другое слово, которое означало одно и то же.[...] В предыдущие дни было различие между "добавлением нового файла в индекс" и "обновлением файла, который уже находится в индексе с новым содержимым".
[...] Современные (и средневековые) версии Git используют "git add
" для обоих. Мы могли бы быть просто честными и называли актом обновления-или-добавления-индекса "add
", но некоторые люди в индустрии "git training" начали преподавать индекс как "промежуточную область для следующий коммит", и в качестве неизбежного результата во многих документах появился глагол "на сцену", означающий "акт добавления содержимого в индекс".
Я иногда сам использую этот глагол, но только тогда, когда я подозреваю, что публика, возможно, узнала Git сначала от этих новых людей. Строго говоря, это избыточное и довольно недавнее слово в словаре Git.