В чем разница между индексом, кэшированным и размещенным в git? - PullRequest
44 голосов
/ 19 августа 2010

Это одно и то же? Если так, то почему так много терминов?!

Кроме того, я знаю, что существует такая вещь, как git stash, где вы можете временно хранить изменения в своей рабочей копии, не передавая их в репозиторий. Я считаю этот инструмент действительно полезным, но, опять же, название очень похоже на кучу других понятий в git -> это очень запутанно !!

Ответы [ 2 ]

37 голосов
/ 19 августа 2010

Индекс / этап / кэш - это одно и то же. Что касается того, почему так много терминов, я думаю, что индекс был «оригинальным» термином, но люди сочли его непонятным, поэтому были введены другие термины.И я согласен с тем, что поначалу это иногда несколько смущает.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.объект коммита, который хранится в определенной директории / базе данных stash).Базовая команда stash будет хранить незафиксированные изменения, внесенные в рабочий каталог (как кэшированные / промежуточные, так и не кэшированные / неотмеченные изменения), а затем вернет рабочий каталог в HEAD.

Это на самом деле не связано с индексом /stage / cache, за исключением того, что он будет хранить незафиксированные изменения, которые находятся в кэше.

Это позволяет быстро сохранить состояние грязного рабочего каталога и индекса, чтобы вы могли выполнять различную работу в чистой среде.Позже вы можете получить обратно информацию в объекте stash и применить ее к своему рабочему каталогу (даже если сам рабочий каталог находится в другом состоянии).

Официальная справочная страница git stash содержит довольно хорошие детали, в то время какоставаясь понятным.В нем также есть хорошие примеры сценариев использования stash.

8 голосов
/ 29 ноября 2017

Это действительно очень запутанно. 3 термина используются взаимозаменяемо. Вот мое мнение о том, почему это называется каждая из этих вещей. Индекс git:

  • двоичный файл .git/index, который является индексом всех отслеживаемых файлов
  • используется как промежуточная область для коммитов
  • содержит кэшированные SHA1-хэши для файлов (повышает производительность)

Важным примечанием является то, что в index / cache / stage содержится список ВСЕХ файлов, находящихся под контролем исходного кода, даже неизмененных. К сожалению, такие фразы, как «добавить файл в индекс» или «файл помещается в индекс», могут вводить в заблуждение, что индекс содержит только измененные файлы.

Вот демонстрация, которая показывает, что индекс git содержит список ВСЕХ файлов, а не только измененных файлов:

# setup
git init

echo 'x' > committed.txt
git add committed.txt
git commit -m 'initial'

echo 'y' > staged.txt
git add staged.txt

echo 'z' > working.txt

# list HEAD
git ls-tree --name-only -r HEAD
# committed.txt

# list index
git ls-files
# committed.txt
# staged.txt

# raw content of .git/index
strings .git/index
# DIRC
# committed.txt
# staged.txt
# TREE

# list working dir
ls -1
# committed.txt
# staged.txt
# working.txt

Дополнительное чтение:

https://www.kernel.org/pub/software/scm/git/docs/technical/racy-git.txt

Что ИМЕННО содержит индекс git?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...