Mercurial является доказательством существования того, что индекс / область размещения Git не нужны.Mercurial и Git одинаково эффективны (по крайней мере, для хранения ревизий), но в Mercurial рабочее дерево является областью подготовки / предлагаемым следующим коммитом.В Git рабочее дерево не имеет значения, а индекс - это область подготовки / предлагаемый следующий коммит.
Тем не менее, Git значительно быстрее , чем Mercurial.Большая часть этой скорости является результатом того, что Git сохраняет свой отдельный индекс (хотя во многом это также связано с реализацией Mercurial на Python, а не на C).Таким образом, присутствие индекса делает Git немного «быстрым», если хотите.
В то время как некоторые люди находят отдельную область подготовки всего лишь раздражением, другие - как вы видели вдругие ответы - найдите эту отдельную область подготовки очень удобной.В частности, вы можете подготовить что-либо - скопировать некоторую версию файла из рабочего дерева в промежуточную область - и затем изменить файл рабочего дерева дальше или по-другому, например, добавить отладочную информацию, которой нет вПереданная копия этого файла.Используя git add -p
и git reset -p
, вы можете добавлять и удалять определенные исправления, оставляя разделы отладки существующими только в рабочем дереве.
Таким образом, это обеспечивает две мотивации дляимея индекс: вы можете иметь область подготовки, которая намеренно отличается от вашего рабочего дерева, и Git идет намного быстрее , потому что область подготовки Git уже подходит для фиксации .(Mercurial не готов к принятию: рабочее дерево должно быть сначала занесено в форму, пригодную для принятия, и независимо от того, какой язык реализует массаж или сколько кэширования вы выбрасываете при этой проблеме,здесь все еще будут некоторые вычислительные усилия.)
После того, как вы увлеклись идеей отдельной промежуточной области, это дает третий мотив: теперь вы можете создавать дополнительные промежуточные области всякий раз, когдаВы хотите, если это полезно для какой-то конкретной цели.Так, например, реализовано git stash
.(Это также относится к git worktree add
, хотя дополнительные рабочие деревья добавляются в виде пары : , вы получаете новое рабочее дерево с новым индексом. Если что-то, это доказывает, что новое рабочее дерево должно be новый индекс, т. Е. Модель Mercurial лучше!)