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 GOODIf 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.