Использование git read-tree без рабочего дерева
Я пытаюсь создать историю коммитов, используя команды git plumbing с голым репо. Я могу создать коммиты с одним безымянным объектом дерева, содержащим BLOB-объекты, но я не могу понять, как заставить этот безымянный объект дерева содержать другие объекты дерева.
Я пытался с помощью git read-tree --prefix=tree_name tree_sha
и это говорит мне: fatal: This operation must be run in a work tree
Я пытался с помощью git mktree
(как показано на этой странице), например: cat ../info.txt | git mktree
info.txt - это файл, содержащий 1 строку:
040000 tree aa8c07e1371022a183b011d5d41517ef54780a17 test_tree
и это говорит мне:
fatal: input format error: 040000 tree aa8c07e1371022a183b011d5d41517ef54780a17 tree_name
Может кто-нибудь сказать мне, как создать и назвать деревья?
2 ответа
Вам нужно четыре пробела вместо одного между хешем и test_tree. Если это все еще не работает, попробуйте вкладку.
040000 tree aa8c07e1371022a183b011d5d41517ef54780a17 test_tree
Я предполагаю дерево с хешем aa8c07e1371022a183b011d5d41517ef54780a17
уже существует в вашем репо? Если не, git mktree
не удастся. Кроме того, у вас есть завершающий символ новой строки в info.txt
? Мое чтение документов предполагает, что это также необходимо.
Я успешно использовал git mktree
как это:
$ cat tree.txt
040000 tree 4d5fcadc293a348e88f777dc0920f11e7d71441c foo
$ git mktree < tree.txt
0a7f38a609340d0b8eede2f6debf8bad4191738f
Где первые два пробела - пробелы, а третий - табуляция и завершающий перевод строки. Если сомневаешься, беги git ls-tree
и проверить его вывод, возможно, с xxd
,