从工作树创建一个git树而不触及索引?

dav*_*ola 12 git version-control

我正在创建一个工具,允许人们将"解决方案"存储到测试中.由于我不想重新发明版本控制,我决定使用git的tree/blob/object东西 - 我的想法是从当前工作目录中创建一个git树对象.

问题是我希望这个工具不要触及用户存储库的状态,除了当然要查找现有对象的哈希值.

我看都mktreewrite-tree,而前者需要ls-tree输出,后者需要检查指标.这些都不是我想要的.

我很乐意深入研究并为工作树编写这些命令的类比,但是我无法找出任何低级git工具来操纵树,blob和对象.

理想情况下,用户将能够运行:

$ git create-tree .
Run Code Online (Sandbox Code Playgroud)

并且git将吐出新创建的树对象的哈希值.

Lil*_*ard 12

使用git mktree肯定是可行的.它读取ls-tree格式化的文本,但您可以使用您想要的任何机制自己生成.

也就是说,继续使用索引可能更容易.毕竟,您可以通过GIT_INDEX_FILE环境变量自由指定您想要的任何位置作为索引.只需将此var设置为指向某个临时位置,根据需要创建索引,创建树,然后重置env var并丢弃临时索引.