Re: git merge commits are non-deterministic? what changed?
- From
Michael J Gruber <git@drmicha.warpmail.net>
- Date
- Nov 12, 2012, 11:27 UTC
- Message-ID
- <50A0DD23.4040800@drmicha.warpmail.net>
- In-Reply-To
- <20121109182753.GQ69724@acme.spoerlein.net>
Ulrich Spörlein venit, vidit, dixit 09.11.2012 19:27:
Show 46 quoted lines
> On Fri, 2012-11-09 at 11:16:47 -0500, Jeff King wrote: >> On Fri, Nov 09, 2012 at 04:52:48PM +0100, Matthieu Moy wrote: >> >>> Ulrich Spörlein <uqs@spoerlein.net> writes: >>> >>>>>> 2. Why the hell is the commit hash dependent on the ordering of the >>>>>> parent commits? IMHO it should sort the set of parents before >>>>>> calculating the hash ... >>>>> >>>>> What would be the sort key? >>>> >>>> Trivially, the hash of the parents itself. So you'd always get >>>> >>>> ... >>>> parent 0000 >>>> parent 1111 >>>> parent aaaa >>>> parent ffff >>> >>> That would change the behavior of --first-parent. Or you'd need to >>> compute the sha1 of the sorted list, but keep the unsorted one in the >>> commit. Possible, but weird ;-). >> >> Right. The reason that merge parents are stored in the order given on >> the command line is not random or because it was not considered. It >> encodes a valuable piece of information: did the user merge "foo" into >> "bar", or did they merge "bar" into "foo"? >> >> So I think this discussion is going in the wrong direction; git should >> never sort the parents, because the order is meaningful. The original >> complaint was that a run of svn2git produced different results on two >> different git versions. The important question to me is: did svn2git >> feed the parents to git in the same order? >> >> If it did, and git produced different results, then that is a serious >> bug. >> >> If it did not, then the issue needs to be resolved in svn2git (which >> _may_ want to sort the parents that it feeds to git, but it would depend >> on whether the order it is currently presenting is meaningful). > > Yeah, thanks, looks like I have some more work to do. I don't quite get > how it could come up with a different order, seeing that it is using svn > as the base. > > Will run some more experiments, thanks for the info so far.
There was a change in the order in which "git cherry-pick A B C" applies the commits. It's the only odering affecting change in 1.8.0 that I can think of right now.
Michael