git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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
Previous: D SundstromNext: Linus Torvalds
Message 2 of 4 in “Raw commands to add object to existing tree”
  1. D SundstromAug 21, 2009
  2. Avery PennarunAug 21, 2009
  3. Linus TorvaldsAug 21, 2009
  4. Avery PennarunAug 21, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.