Найти - Пользователи
Полная версия: Система контроля версий
Начало » Python для экспертов » Система контроля версий
1 2
Enchantner
Собственно, понадобилось написать что-то самое простенькое наподобие CVS. То есть система с отслеживанием изменений в подконтрольных файлах, причем с добавочным резервированием (incremental backup). Подскажите, пожалуйста, в какую сторону копать и как грамотно все это дело реализовать. Каким-то макаром использовать diff'ы? И да, надо будет реализовать работу с удаленным хостом. Клиент-сервер?
poltergeist
всё уже давно придумали: rsync
Enchantner
poltergeist
да знаю, от меня просят свою :) С преферансом и пианистками.
poltergeist
дубль второй: mercurial + своя надстройка
Enchantner
poltergeist
Да я понимаю, что есть куча сторонних куда более крутых разработок! :) Я просто хочу хотя бы сам для себя понять, как это можно замутить - мониторинг файлов, сбор изменений, работа с сервером. И да, исходники mercurial крутые, но вряд ли я в них вот так сразу быстро один разберусь)
nuklea
$ eix duplicity
[i] app-backup/duplicity
Available versions: 0.4.11 0.5.17 ~0.5.20 ~0.6.05 ~0.6.06 {s3}
Installed versions: 0.5.17(09:05:25 17.12.2009)(-s3)
Homepage: http://www.nongnu.org/duplicity/
Description: duplicity is a secure backup system using gnupg to encrypt data
Там есть все! :) Инкрементальный бэкап тоже. Юзаю активно :)
Ferroman
Enchantner
Ну, для начала, стоит определится в типе системы - распределённая/централизированная. Зависит от контекста использования.
Команды и фичи можно почерпнуть отсюда - http://en.wikipedia.org/wiki/Revision_control#Common_vocabulary

Как делать с удалённым хостом - зависит от типа системы.
Определись с этими вопросами - проще будет ставить следующие требования, и рисовать архитектуру.

А вообще, я согласен с другими коментаторами - не стоит изобретать велосипед.
shiza
К меркуриалу можно хуки писать.
Enchantner
В общем, небольшой ап :) Разбираю тут работу с модулем difflib. Прикол в том, что diff файла получается раза в полтора больше, чем сам файл. Неужели нет алгоритма попроще, чтобы многомегабайтный дамп бд лежал просто кейфреймом, а остальные файлы были маленькими диффами от него?
Alex2ndr
Enchantner
В общем, небольшой ап :) Разбираю тут работу с модулем difflib. Прикол в том, что diff файла получается раза в полтора больше, чем сам файл. Неужели нет алгоритма попроще, чтобы многомегабайтный дамп бд лежал просто кейфреймом, а остальные файлы были маленькими диффами от него?
Я с difflib не разбирался, и в работе системы контроля версия понимаю только алгоритм - но все-таки попробую высказаться.
Если у вас есть какой-то дамп(т е файл), затем в него внесены изменения , то я думаю что diff между этими 2-мя файлами будет примерно в 2 раза больше внесенных изменений. Пример - вы изменили три строчки - diff будет содержать 6 строчек - три первоначальные и три конечные строчки. Если коммиты(т е изменения) небольшие, то и diff будут небольшие. Если же изменилось почти все , то и размер diff будет в 1.5-2 раза больше оригинала.

Еще одна засада может быть вот в чем - я рассказал про обычный текстовый файл, в который diff может посмотреть изнутри(ну вот так я выразился). А вот дамп БД может и не быть обычным текстовым файлом. И при небольших изменениях в самой базе, дампы при построчном сравнении в diff могут отличаться просто кардинально. Вот тогда diff действительно будет колоссальных размеров. Как быть в такой ситуации я не знаю - либо изменить diff, чтобы он понимал дамп по нормальному(читай писать свой diff) или как-то сравнивать в самой бд и тд.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB