Как насчет такой схемы: сидит ББ, к сети подключенный.
У него там все модули и доки с одинаковым именем пронумерованы.

Если, скажем, чел засылает туда измененный док, то ББ его принимает, дает номер и садит поверх старых.
Если это модуль, то ББ его компилит, и если не компилится -- дает отлуп.
Иначе оставляет сей модуль с новым номером и текущим моментом.

Аналогично если засылается последовательность модулей: компилируется всё тупо в том порядке, который чел указал, и если некомпайл, то отлуп и перекомпиляция/восстановление старых, попавших под новую компиляцию (список же под рукой), снова в том же порядке.

Можно опцию про проверку интерфейсов (по умолчанию запрещать изменение; отследить легко).

И всё. Никаких diff. Юзай F9, кому надо сравнивать. Только возможность получения старых версий -- по дате или по номеру etc.

Польза diff при живых модулях неочевидна, а сложность порядочная, только путаться.
А всё остальное описанное -- вполне straightforward и не трудно, мне кажется.