Скопируйте Git index во временную папку - PullRequest
0 голосов
/ 07 сентября 2018

Предположим, у меня есть утилита some-check {baseline_folder} {working_folder}, которая выполняет некоторое сравнение наборов файлов (не отдельных файлов).

Я бы хотел использовать эту утилиту в двух немного разных вариантах использования:

  • проверка рабочего дерева по версии HEAD;
  • предварительная проверка индекса против HEAD

Первый вариант использования довольно прост, поскольку получение базовой линии (т.е. HEAD) во временную папку не представляет особой проблемы.

Реальный вопрос в том, как поместить индекс в какую-нибудь папку. Единственное, что я вижу, это что-то вроде:

  1. создать тайник

  2. применить его немедленно

  3. используйте git-archive для создания почтового индекса с помощью тайника ref

  4. распаковать его во временную папку

  5. уронить тайник

Есть ли менее подробный способ сделать это?

UPD: Короче говоря: проблема в том, как получить папку, которая имеет стадию HEAD +, но без изменения / без отслеживания.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

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

tmpdir=$(mktemp -d)                # or your other chosen method
trap "rm -rf $tmpdir" 0 1 2 3 15   # do something different in other languages

GIT_WORK_TREE=$tmpdir git checkout-index --all

Убедитесь, что временный каталог существует и является пустым (mktemp -d здесь делает это), и обязательно очистите его по окончании (trap здесь делает это).

Обратите внимание, что правила атрибутов будут применены к шагу git checkout-index. Используя git archive, вы получаете больше контроля с export-ignore и export-subst. Если вы хотите использовать этот метод, вы можете превратить текущий индекс в объект дерева, используя git write-tree, а затем использовать git archive для этого объекта дерева.

Также обратите внимание, что метод git write-tree вызывает ошибку с неотправленным индексом, в то время как метод git checkout-index просто пропускает неотмеченные файлы из целевого рабочего дерева.

0 голосов
/ 07 сентября 2018

Есть ли менее подробный способ сделать это?

Там лучше:

git worktree

Это позволяет вам превратить любой каталог в приложение к git-репозиторию, что позволяет вам одновременно проверять две разные ревизии. И вы можете добавить столько приложений, сколько вам нужно, а затем отказаться от них, когда они больше не нужны. Например, очень полезно работать с двумя версиями одной и той же библиотеки (например, с последней стабильной версией и с версией разработки).

Здесь был похожий вопрос здесь. Это должно соответствовать вашим потребностям.

...