签出一个Git树对象到工作目录?

时间:2014-07-14 18:44:10

标签: git

我构建了一个包含几个文件的树,并且只存在于对象数据库中。然后我将它添加到与路径关联的索引中,并提交:

git hash-object -w --stdin
...
abcd1
git hash-object -w --stdin
...
abcd2

git mktree
100755 blob abcd1 a.txt 
100755 blob abcd2 b.txt

# resultant tree sha1:
abc123

git update-index --index-info
100755 tree abc123 fake.tree.path

git commit -m "fake.tree.path tree commit"

这似乎有效,但我想要的是:

git checkout fake.tree.path

并且有#34; a.txt"和" b.txt"写入工作目录。这可能吗?

2 个答案:

答案 0 :(得分:1)

我认为我做错了是这样的:

git update-index --index-info
100755 tree abc123 fake.tree.path

应该是这样的:

git update-index --index-info
040000 tree abc123 fake.tree.path

现在正在执行git checkout fake.tree.path根据需要构建目录。

答案 1 :(得分:1)

  1. 空索引git read-tree --empty

  2. 将树对象读入索引git read-tree <tree-isha>

  3. 除目录.git之外的空工作目录 ls -a | grep -vw .git | xargs rm -fr | xargs rm -fr

  4. 结帐索引到工作树 git checkout-index -a

参考资料