git-checkout-index
Имя
git-checkout-index - Копирование файлов из индекса в рабочую директорию
Синтаксис
git checkout-index [-u] [-q] [-a] [-f] [-n] [--prefix=<string>]
[--stage=<number>|all]
[--temp]
[--ignore-skip-worktree-bits]
[-z] [--stdin]
[--] [<file>…] Описание
Копирует все перечисленные файлы из индекса в рабочую директорию (без перезаписи существующих файлов).
Параметры
- -u
- --index
-
обновление информации о состоянии для проверенных записей в файле индекса.
- -q
- --quiet
-
не выводить сообщения, если файлы существуют или отсутствуют в индексе
- -f
- --force
-
принудительная перезапись существующих файлов
- -a
- --all
-
выводит все файлы из индекса, за исключением тех, для которых установлен бит skip-worktree (см.
--ignore-skip-worktree-bits). Не может использоваться вместе с явными именами файлов. - -n
- --no-create
-
Не создавать новые файлы, только обновлять уже проверенные.
- --prefix=<string>
-
При создании файлов добавляет префикс <string> (обычно директория, включая конечный '/')
- --stage=<number>|all
-
Вместо проверки неслитых записей, копирует файлы из указанной стадии. <number> должно быть от 1 до 3. Примечание: --stage=all автоматически подразумевает --temp.
- --temp
-
Вместо копирования файлов в рабочую директорию, записывает содержимое в временные файлы. Ассоциации временных имен будут записаны в стандартный вывод.
- --ignore-skip-worktree-bits
-
Выводит все файлы, включая те, для которых установлен бит skip-worktree.
- --stdin
-
Вместо получения списка путей из командной строки, считывает список путей из стандартного ввода. Пути разделены символом LF (т.е. один путь на строку) по умолчанию.
- -z
-
Значимо только с
--stdin; пути разделяются символом NUL вместо LF. - --
-
Больше аргументов не интерпретируются как параметры.
Порядок использования флагов раньше имел значение, но сейчас нет.
Просто выполнение git checkout-index ничего не делает. Вы, вероятно, имели в виду git checkout-index -a. А если вы хотите принудительно заменить, то git checkout-index -f -a.
Интуитивность здесь не цель. Повторяемость - да. Причина поведения "без аргументов - без работы" заключается в том, что из скриптов вы можете сделать:
$ find . -name '*.h' -print0 | xargs -0 git checkout-index -f --
что заменит все существующие *.h файлы их кэшированными копиями. Если бы пустая командная строка подразумевала "все", это принудительно обновило бы всё в индексе, что не было целью. Но поскольку git checkout-index принимает --stdin, было бы быстрее использовать:
$ find . -name '*.h' -print0 | git checkout-index -f -z --stdin
-- — это просто хорошая идея, когда вы знаете, что остальное будут имена файлов; это предотвратит проблемы с именем файла, например, -a. Использование -- — это, вероятно, хорошая политика в скриптах.
Использование --temp или --stage=all
Когда используется --temp (или подразумевается --stage=all) git checkout-index создаст временный файл для каждого элемента индекса, который будет проверяться. Индекс не будет обновляться с информацией о состоянии. Эти параметры могут быть полезны, если вызывающей стороне нужны все стадии всех неслитых записей, чтобы обрабатывать неслитые файлы с помощью внешнего инструмента слияния.
В стандартный вывод будет записан список ассоциаций имен временных файлов с именами отслеживаемых путей. Формат списка имеет две разновидности:
-
tempname TAB path RS
Первый формат используется, когда
--stageопущено или не--stage=all. Поле tempname — имя временного файла, содержащего содержимое файла, а path — имя отслеживаемого пути в индексе. Выводятся только запрошенные записи. -
stage1temp SP stage2temp SP stage3tmp TAB path RS
Второй формат используется, когда
--stage=all. Три поля временных файлов (stage1temp, stage2temp, stage3temp) перечисляют имя временного файла, если в индексе есть запись стадии, или.если записи стадии нет. Пути, имеющие только запись стадии 0, всегда будут исключены из вывода.
В обоих форматах RS (разделитель записей) по умолчанию — перевод строки, но будет нулевым байтом, если -z был передан в командной строке. Имена временных файлов всегда являются безопасными строками; они никогда не будут содержать символы разделителей каталогов или пробелы. Поле path всегда относительно текущей директории, а имена временных файлов всегда относительно верхнего уровня каталога.
Если копируемый объект в временный файл — символическая ссылка, содержимое ссылки будет записано в обычный файл. От конечного пользователя или интерфейса ПО зависит, будет ли эта информация использоваться.
Примеры
- Для обновления и обновления только файлов, которые уже проверены
-
$ git checkout-index -n -f -a && git update-index --ignore-missing --refresh
- Использование git checkout-index для "экспорта всей ветви"
-
Функциональность префикса в основном делает тривиальным использование
git checkout-indexв качестве функции "экспорта как дерева". Просто прочитайте нужное дерево в индекс и сделайте:$ git checkout-index --prefix=git-export-dir/ -a
git checkout-indexбудет "экспортировать" индекс в указанную директорию.Конечный "/" важен. Экспортируемое имя буквально просто добавляется в качестве префикса к указанной строке. Сравните это с следующим примером.
- Экспорт файлов с префиксом
-
$ git checkout-index --prefix=.merged- Makefile
Это выведет текущую кэшированную копию
Makefileв файл.merged-Makefile.
checkout-index
© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-checkout-index