我正在创建一个工具,允许人们将“解决方案”存储到测试中。由于我不想重新发明版本控制,我决定使用git的tree / blob / object东西 - 我的想法是从当前工作目录中创建一个git树对象。
问题在于我希望此工具不会触及用户存储库的状态,当然除了查找现有对象的哈希值之外。
我查看了mktree
和write-tree
,前者需要ls-tree
输出,后者需要检查索引。这些都不是我想要的。
我很高兴深入研究并为工作树编写这些命令的类比,但是我无法找出任何较低级别的git工具来操作树,blob和对象。
理想情况下,用户可以运行:
$ git create-tree .
并且git会吐出新创建的树对象的哈希值。
答案 0 :(得分:12)
使用git mktree
肯定是可行的。它读入ls-tree
格式的文本,但您可以使用您想要的任何机制自己生成。
也就是说,继续使用索引可能更容易。毕竟,您可以通过GIT_INDEX_FILE
环境变量自由指定您想要的任何位置作为索引。只需将此var设置为指向某个临时位置,根据需要创建索引,创建树,然后重置env var并丢弃临时索引。