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

Re: sha1 of the repo excluding history ?

From
Shawn O. Pearce <spearce@spearce.org>
Date
Apr 12, 2007, 23:40 UTC
Message-ID
<20070412234032.GE12979@spearce.org>
In-Reply-To
<f36b08ee0704121626i6a27dcecp8b0b10e0f7db2ef7@mail.gmail.com>
Yakov Lerner <iler.ml@gmail.com> wrote:
Show 9 quoted lines
>    Can I obtain from git the sha1 of the total last state of the
> repo excluding history ? This is a state that covers contents and
> names of all files and dirs, and x perm of files;
> but excludes history, timestamps, ownerhisp, and inode numbers.
> 
> That would be approximately like the slow method:
>          'find | egrep -v '/\.git(/|$)' | sort | Xcpio -o | sha1sum -'
> (imagining Xcpio that does not archive any ownership, timestamps,
> and inode numbers). Can I obtain this result immediately from git ?
	git rev-parse HEAD^{tree}

The trick here is ^{tree}; this operator takes a commit-ish (commit or tag) and returns the SHA-1 of the tree that the commit-ish points at. That SHA-1 is the SHA-1 of the file contents, names, and executable bits, but nothing else. No history.

I use it sometimes after a rebase when I reorganize history:
	old=`git rev-parse HEAD^{tree}`
	.... do rebasing magick ...
	test $old = `git rev-parse HEAD^{tree}` && echo GOOD

If I don't get back GOOD then I know I somehow changed the files in a way that isn't what I had before, and that wasn't what I wanted if all I was doing was cleaning up commit messages.

-- 
Shawn.
Previous: Yakov LernerNext: Junio C Hamano
Message 2 of 3 in “sha1 of the repo excluding history ?”
  1. Yakov LernerApr 12, 2007
  2. Shawn O. PearceApr 12, 2007
  3. Junio C HamanoApr 13, 2007

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.