Создайте дерево 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 и отбросьте временный индекс.