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

Re: git diff-tree against the root commit

From
Linus Torvalds <torvalds@linux-foundation.org>
Date
Nov 7, 2010, 17:23 UTC
Message-ID
<AANLkTimiyFhggBvK-AGqRnMXta65rEJvJSeQ+QGOnZWp@mail.gmail.com>
In-Reply-To
<4CD68662.4060709@gmx.de>

On Sun, Nov 7, 2010 at 2:58 AM, Christoph Mallon <christoph.mallon@gmx.de> wrote:

Show 10 quoted lines
> On 29.10.2010 08:13, Joshua Jensen wrote:
>> I am mirroring a Git repository into another SCM.  I am using 'git diff-tree' to tell me what changes I need to make to the other SCM.
>>
>> Today, I attempted to mirror a new submodule.  'git diff-tree' reported two SHAs... 0000000000000000000000000000000000000000 and the revision the submodule currently resides at.  I attempted to run a 'git diff-tree' within the submodule for the all zero SHA and the revision specified, but apparently, 0000000000000000000000000000000000000000 does not really represent the root commit and does not work.  I then discovered the --root option, but that doesn't seem to give me the complete file list either.
>>
>> 'git diff-tree' has been working great for everything else, but I really need a root commit diff-tree listing for proper automation.
>>
>> What are my options?
>
> Diff against the empty tree.
That works, but it's a bit too technical.
The traditional way to do it is to just
   git diff-tree --root <commit>

where the magic "--root" option is just the flag to say "I want to see the root as a diff too". The reason it isn't the default is historical: since git started out for the kernel, and since the root is an import from another tree, showing the root as a patch was annoying.

You have to realize that back in the original coding days (when git read-tree was introduced), it was meant for very basic scripting. What is now "git log -p" used to be basically

  git-rev-list $(cat .git/HEAD) | git-diff-tree --stdin

and with the target being the kernel, the default of not showing that first commit was a sane one (and going back even further, git-diff-tree really only worked on trees, so you had to give explicit beginning and end points).

Of course, by the time we actually had a "git log" command, I think that default had already changed. But it still explains why there is a separate option to show the root commit with a patch.

                                 Linus
Previous: Christoph Mallon
Message 3 of 3 in “git diff-tree against the root commit”
  1. Joshua JensenOct 29, 2010
  2. Christoph MallonNov 7, 2010
  3. Linus TorvaldsNov 7, 2010

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.