Subject: How to put tree into index

From: Alexander GQ Gerasiov <[email-masked]>
Date: Wed, 20 Nov 2013 15:47:14 +0400

Hello there.

I need to realize the following scenario with git.

1. I have repository with tree like this:

dir1/
	file1
	file2
	file3

dir2/
	subdir1/
		some files

2. Current branch is B.

3. I want to get dir1 from branch A, and save it's content on current
branch (B) as dir2/subdir1

>>From my point I should do the following

1. Get tree-object sha1 of dir1 from A with git ls-tree
2. Put into index new tree-object with the same sha1/content, but under
the name dir2/subdir1
3. Commit index.

But it doesn't work for me. It works with blob object, but not with
tree object.

I tried the following commands:

git ls-tree A dir1 | 
sed 's#dir1#dir2/subdir1#' | 
git update-index --index-info

But after this I see in the index not tree-object with mode 040000, but
commit-object with mode 160000.

So my question is
How to put into index tree-object with known sha1 and given name?

PS I was able to do what I need when copied files, not tree-itself.
Just add -r to git ls-tree, and put into index blobs/files, not tree.
But I'm interested: is it possible to put tree-object into index?