Re: Raw commands to add object to existing tree
- From
Avery Pennarun <apenwarr@gmail.com>
- Date
- Aug 21, 2009, 22:39 UTC
- Message-ID
- <32541b130908211539ke64bd2bif0aa7cff6bc6ae8f@mail.gmail.com>
- In-Reply-To
- <ef72456d0908211531m5e261805p2f67d3a8a16a0b5@mail.gmail.com>
On Fri, Aug 21, 2009 at 10:31 PM, D Sundstrom<sunds@peapod.net> wrote:
Show 10 quoted lines
> Both the community git manual: > http://book.git-scm.com/7_raw_git.html > > and Pro Git book: > http://progit.org/book/ch9-2.html > > walk you though low level details of creating objects and trees in git, and > then committing these new trees. > > However, they do not show you how to add and commit into existing trees.
Naturally, you can't change an "existing" tree, because any given tree (identified by its sha-1 hash) can never change. You presumably want to create a *new* tree and commit that.
The easiest way I know to do this is to create a new indexfile, fill it with what you want, and create the tree for that.
(Warning: untested code follows)
export GIT_INDEX_FILE=/tmp/my-temp-index git read-tree PREVIOUS_COMMIT_OR_TREE_ID hash=$(git hash-object NEW_FILE) git update-index --cacheinfo "0644 $hash path/of/file/in/tree" commitid=$(echo COMMIT MESSAGE | git commit-tree $(git write-tree)) git update-ref refs/heads/BRANCHNAME $commitid PREVIOUS_COMMIT_OR_TREE_ID
Have fun,
Avery