Make git replay print detailed conflict information

At the moment Gitaly uses git-merge-tree to implement UserRebase. When this command runs into a conflict, it shows something like this:

$ git merge-tree main other
3f4097153c43f17c0000f0fb18cbe09fb5e4a847
100644 9c59e24b8393179a5d712de4f990178df5734d99 1       a
100644 ef399f1933d46d8397ee58564d931a6c23f4a213 2       a
100644 e019be006cf33489e2d0177a3837a2384eddebc5 3       a
100644 4cf5aa5f9a644263dbe3d6e78bcbef45487a802c 2       b
100644 ce013625030ba8dba906f756967f9e9ca394464a 3       b

Auto-merging a
CONFLICT (content): Merge conflict in a
Auto-merging b
CONFLICT (add/add): Merge conflict in b

In that output we see the <mode> <oid> <side> <path> for each conflict. The <side> is where this version of that path lives. 1 is the merge-base and 2 and 3 are the branches we're trying to merge.

Gitaly uses this output to fill MergeTreeConflictError and from that RebaseConflictError and eventually gitalypb.UserRebaseConfirmableError_RebaseConflict.

When git-replay runs into a conflict, it promptly die()s.

We should make git-replay print more details about the conflict.

Edited by Toon Claes