Подтвердить что ты не робот

Что означает "добавление к индексу" в значении Git?

У меня есть вопрос относительно основ Git.

В принципе, что действие, известное как "добавить к индексу", означает в Git? Я понимаю это так:

Если для любого файла Git вычисляется сумма SHA-1, то в основном добавление к индексу означает, что он вычисляет сумму SHA-1 и добавляет файл в промежуточную область.

Правильно ли я?

4b9b3361

Ответ 1

Полезная метафора

"Добавление файла в индекс", "установка файла", "добавление файла в промежуточную область" - все синонимы.

Я лично предпочитаю индексировать область промежуточной области, потому что она поддается полезной метафоре. Если фиксация сродни "снятию моментального снимка", постановка " составляет снимок".

Представьте себя профессиональным фотографом, который возьмет на себя классную картину: вы соберете все свои предметы и подготовьте их к фото, вы убедитесь, что они все там, и что нет злоумышленников, что все важнее в рамке и т.д. Затем... Snap!

enter image description here

Конечно, если вы понимаете, сразу после съемки, что слишком много детей закрыли глаза (или что какой-то ребенок дал уши учительницы кролика!), вы можете отказаться от этой первой картины и взять другую, лучший; в Git, что соответствует изменению последнего коммита. Но я отвлекаюсь...

Что происходит, когда вы добавляете (новый) файл в индекс

Чтобы выполнить что-то, вы обычно использовали команду высокого уровня ( "фарфор" ) git add... или точный эквивалент git stage (введенный Скоттом Чаконом около Git v1.6), который я нахожу гораздо более интуитивно понятный, но не кажется почти таким же популярным.

Когда вы добавляете новый файл в промежуточную область, происходят три вещи:

  • содержимое файла хешировано,
  • содержимое файла хранится в вашей базе данных репозитория,
  • содержимое файла в вашем рабочем дереве зарегистрировано в файле .git/index.

Добавление файла в индекс с помощью команд сантехники

В качестве эксперимента, чтобы исправить идеи, вы можете использовать команды низкого уровня ( "сантехника" ) Git для воспроизведения того, что git add делает в этом простом случае. Начните с нового репозитория:

$ cd ~/Desktop
$ mkdir teststage
$ cd teststage
$ git init

Прежде чем делать что-либо еще, перейдите в папку .git/objects.

$ ls -la .git/objects

Вы увидите, что он содержит только два (пустых) подкаталога: info и pack. Создайте файл, скажем README.md:

$ printf "hello\n" > README.md

Теперь давайте этап README.md, шаг за шагом. Сначала используйте команду git hash-object нижнего уровня для (1) хеш содержимого README.md и (2) записать последний в базу данных репозитория.

$ git hash-object -w README.md
27728344ab3ae5b8aa334418d1e1b0f5be0ea0cc

(-w означает запись здесь).

Теперь, если вы посмотрите в папку .git/objects, вы увидите, что новый объект (blob) был добавлен в базу данных:

$ tree -la .git/objects/
.git/objects
├── 27
│   └── 728344ab3ae5b8aa334418d1e1b0f5be0ea0cc
├── info
└── pack

Осталось еще один этап завершения README.md. Нам нужно (3) зарегистрировать содержимое файла в индексе. Загляните внутрь .git, в нем еще не должно быть файла с именем index. Теперь, если вы запустите

$ git update-index --add --info-only README.md

а затем загляните внутрь .git, вы увидите, что был создан двоичный файл index.

Что это. Вы поставили README.md. Он готов пойти в следующий коммит. Проверьте это самостоятельно:

$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

    new file:   README.md

Теперь вы можете сделать свою первую фиксацию, если хотите.

Ответ 2

Когда вы добавляете файл, он указывает, что в качестве файла, который вы зафиксируете после запуска команды git commit. Яркой клавишей для добавления всех измененных файлов автоматически является фиксация с помощью git commit -a. Еще один ярлык, если вы добавляете несколько новых файлов одновременно, - это запустить git add -A.