Merge entre versões entregues por diversas equipes

Caros,

Estou cuidando de três frentes distintas de trabalho para um mesmo sistema:

1 - A recepção de código fonte de uma fábrica de software
2 - O desenvolvimento interno de algumas novas funcionalidades com o código antigo
3 - A recepção de outra parte do sistema de uma outra empresa

Ou seja, de vez em sempre tenho que fazer merges do código interno com o código recebido dessas duas outras empresas!

Ai toca o horror! Diferentes identações, diferentes espaços em branco, diferentes quebras de linha para uma mesma coisa já é suficiente para os sistemas que utilizo para merge (Tortoise e winmerge e Subversion) acusarem diferença no código e eu perder um ano verificando as diferenças.

Como geralmente é feito isso?
Quais os melhores sistemas para realizar os merges?
Quais as boas práticas para facilitar esse processo?

O que vocês me recomendam?

Thx,
PH

-> Definir padrão de formatação de código uniforme entre os times. Se possível, forçar isso para todos via ‘save actions’
-> Definir estilos de organização de código. Exemplos: primeiro atributos, depois métodos. Se puder associar ‘save actions’ pra forçar isso, melhor
-> Usar pelo menos um analisador estático de código. Ver exemplos em: http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
-> Fazer seus merges em aplicativos que permitam ignorar whitespaces, para facilitar. Exemplo: o Eclipse permite
-> Se possível, usar ambientes de controle de versão robustos e com boa performance. A maioria dos mais recentes são bons, pode ser: Git, Mercurial, SVN, …

Alguns podem discordar das duas primeiras idéias, mas entendo ser um mal necessário.