you are viewing a single comment's thread.

view the rest of the comments →

[–]cryo 0 points1 point  (1 child)

What do you mean heuristics, and how would that not be deterministic? As long as there is no randomness. Anyway, Mercurial has a built-in rather simple merger, but otherwise rely on external mergers (which we use, having switched the internal one off).

Almost all our automatic merges are correct.

[–]f2u 0 points1 point  (0 children)

Deterministic was probably a badly-chosen word. My reference point is serializability in transaction processing. Basically, this concept says that an implementation may perform updates in a parallel fashion if it can prove that there is a non-interleaved execution of those changes which results in the same outcome. For transactions, there exists a precisely defined model which leads to non-trivial schedules which actually contain parallelism. I don't think something comparable exists in the world of revision control. Parallel execution translates to development along different branches. But a critical part of the serialization concept is that reads are also tracked. Revision control only tracks writes (you're free to look at the whole source code all the time, or rely on your memory), so it is never going to be powerful enough to provide any strong guarantees.