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

时间:2012-03-07 00:40:20

标签: git version-control

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

问题在于我希望此工具不会触及用户存储库的状态,当然除了查找现有对象的哈希值之外。

我查看了mktreewrite-tree,前者需要ls-tree输出,后者需要检查索引。这些都不是我想要的。

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

理想情况下,用户可以运行:

$ git create-tree .

并且git会吐出新创建的树对象的哈希值。

1 个答案:

答案 0 :(得分:12)

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

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