Я бы заглянул в дельта-формат svnadmin
. Я немного поиграл с этим, но в основном это один огромный файл типа патча, содержащий все файлы и все ревизии. Это текст по своей природе, поэтому относительно просто для обработки с чем-то вроде Perl, и он довольно мал по сравнению с прохождением всей ревизии по одному.
Вам, вероятно, нужно иметь представление всех файлов (если 4 миллиона, возможно, для этого используйте SQLite) и обновлять их по мере прохождения каждой ревизии. Дельта выполняет ревизии по порядку, поэтому она должна быть относительно простой. (Может быть, я настроен оптимистично.)