# just curious: what influences a commit hash?

4 messages from 2009-03-05 to 2009-03-05. Participants: stoecher@gmx.at, Matt Enright, Uwe Kleine-König, Matthieu Moy.
Thread: https://gitlist.dev/t/18141

## stoecher@gmx.at, 2009-03-05 06:36

Subject: just curious: what influences a commit hash?
Message-ID: <20090305063632.42880@gmx.net>
URL: https://gitlist.dev/e/20090305063632.42880%40gmx.net

```
Hi,

being new to git I did some experiments with commits looking at the hashes. What I observed:
* The same commit (same file, same committer, same message) into different empty repositories (git init) gives different hashes. So I assume that also the time of the commit influences the hash. Is this intended? For what reason?
* Having created two repositories exactly the same way (the history is the same except for the commit times and hashes) I applied the same patch (using git am) and again I got different hashes for these commits. So in some way also the repository/branch influences the hash of a commit!?

From reading the Git user's manual, chapter 10, object storage format, I was not expecting this. Can someone explain or give a link to a more detailed description?

thank you,

Wolfgang

-- 
Computer Bild Tarifsieger! GMX FreeDSL - Telefonanschluss + DSL
für nur 17,95 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K11308T4569a

```

## Matt Enright, 2009-03-05 07:25

Subject: Re: just curious: what influences a commit hash?
Message-ID: <1236237939.2421.38.camel@virgil>
URL: https://gitlist.dev/e/1236237939.2421.38.camel%40virgil
In-Reply-To: <20090305063632.42880@gmx.net>

```
On Thu, 2009-03-05 at 07:36 +0100, stoecher@gmx.at wrote:
> Hi,
> 
> being new to git I did some experiments with commits looking at the hashes. What I observed:
> * The same commit (same file, same committer, same message) into different empty repositories (git init) gives different hashes. So I assume that also the time of the commit influences the hash. Is this intended? For what reason?
> * Having created two repositories exactly the same way (the history is the same except for the commit times and hashes) I applied the same patch (using git am) and again I got different hashes for these commits. So in some way also the repository/branch influences the hash of a commit!?

This should be expected if the initial hashes in the history are
different. The hash of a commit is based also on the hashes of all
parent commits - in this way git 'protects' the repository history by
guaranteeing that if two objects have the same hash, they will come from
the same history.
So the second issue is a consequence of the first, though I am not
certain why the first occurs (if the file contents and size are the
same, I would expect the hash for the blob/tree to be the same - maybe
due to git's special handling of initial commits?)

> From reading the Git user's manual, chapter 10, object storage format, I was not expecting this. Can someone explain or give a link to a more detailed description?
> 
> thank you,
> 
> Wolfgang
> 

```

## Uwe Kleine-König, 2009-03-05 09:02

Subject: Re: just curious: what influences a commit hash?
Message-ID: <20090305090221.GA28687@pengutronix.de>
URL: https://gitlist.dev/e/20090305090221.GA28687%40pengutronix.de
In-Reply-To: <1236237939.2421.38.camel@virgil>

```
Hi,

On Thu, Mar 05, 2009 at 02:25:39AM -0500, Matt Enright wrote:
> On Thu, 2009-03-05 at 07:36 +0100, stoecher@gmx.at wrote:
> > Hi,
> > 
> > being new to git I did some experiments with commits looking at the hashes. What I observed:
> > * The same commit (same file, same committer, same message) into different empty repositories (git init) gives different hashes. So I assume that also the time of the commit influences the hash. Is this intended? For what reason?
Yes, commit time and commit date influence the hash.

But the hashes for the corresponding trees should be the same.
Check the output of git rev-parse $commit^{tree}.

If you want to reproduce the exact same commit, you need to set
the env variables GIT_AUTHOR_DATE and GIT_COMMITTER_DATE.  (Not sure,
but GIT_AUTHOR_DATE might be handled by git am.)

Best regards
Uwe

-- 
Pengutronix e.K.                              | Uwe Kleine-König            |
Industrial Linux Solutions                    | http://www.pengutronix.de/  |

```

## Matthieu Moy, 2009-03-05 10:38

Subject: Re: just curious: what influences a commit hash?
Message-ID: <vpq7i3445m7.fsf@bauges.imag.fr>
URL: https://gitlist.dev/e/vpq7i3445m7.fsf%40bauges.imag.fr
In-Reply-To: <20090305063632.42880@gmx.net>

```
stoecher@gmx.at writes:

> Hi,
>
> being new to git I did some experiments with commits looking at the hashes. What I observed:
> * The same commit (same file, same committer, same message) into
> different empty repositories (git init) gives different hashes. So I
> assume that also the time of the commit influences the hash. Is this
> intended? For what reason?

You should distinguish "commit objects" from "tree objects". You can
see the "commit" object with, for example:

$ git cat-file -p HEAD
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author Matthieu Moy <Matthieu.Moy@imag.fr> 1236249249 +0100
committer Matthieu Moy <Matthieu.Moy@imag.fr> 1236249249 +0100

foo

See: it contains a reference to the tree, possibly references to the
parents, and a timestamp. So, hashing it takes the timestamp into
account. A consequence of this is that you can not change the
timestamp for a commit without changing the "revision identifier"
(i.e. the hash of the commit object).

But the empty tree object is deterministically
4b825dc642cb6eb9a060e54bf8d69288fbee4904.

-- 
Matthieu

```
