From what I understand, it's a tooling problem and not a technical issue with Git. By default Git only supports text diffs but that is not a fundamental constraint of the architecture. Actually Git deals with binary blobs and the diffs are a UI porcelain layer. Binary diffs could be added on top with just a SMOP