Я не знаю, что они используют. Но вы можете использовать файловую систему из c #. Это позволит вам поймать событие изменения файла. Это не самая простая вещь для работы, но простая в использовании.
Чтобы убедиться, что старые ревизии файла не перезаписывают новые, я предполагаю, что они используют счетчик ревизий, что часто бывает.
Чтобы определить, изменился ли файл из текущего сохраненного файла, я полагаю, что они могут использовать несколько проверок
if (local[file.name].size != server[file.name].size)
{
file.changed = true;
}
else if (local[file.name].md5 != server[file.name].md5)
{
file.changed = true;
}
else
{
file.changed = false;
}