Создайте дерево git из рабочего дерева, не касаясь индекса?

Я создаю инструмент, который позволит людям хранить "решения" для тестов. Поскольку я не хочу повторно использовать контроль версий, я решил использовать материал git tree/blob/object - моя идея - создать дерево-объект git из текущего рабочего каталога.

Проблема в том, что я хочу, чтобы этот инструмент не касался состояния репозитория пользователя, кроме как, конечно, искать хеши для существующих объектов.

Я просмотрел как mktree, так и write-tree, а первый - ls-tree, а последний должен изучить индекс. Ни то, ни другое не хочу.

Я рад погрузиться глубже и написать аналоги этих команд для рабочего дерева, однако мне трудно понять какие-либо более низкоуровневые инструменты git для управления деревьями, блобами и объектами.

В идеале пользователь сможет запустить:

$ git create-tree .

и git выплюнут хэш только что созданного древовидного объекта.

Ответ 1

Использование git mktree, безусловно, выполнимо. Он читает текст ls-tree -форматированный, но вы можете сгенерировать его самостоятельно, используя любой механизм, который вы хотите.

Тем не менее, может быть проще идти вперед и использовать индекс. В конце концов, вы можете указать любое местоположение, которое вы хотите в качестве индекса, через переменную среды GIT_INDEX_FILE. Просто установите этот параметр var, чтобы указать на некоторое временное местоположение, создайте свой индекс, но вы хотите, создайте свое дерево, а затем reset env var и отбросьте временный индекс.