Сохранение истории изменений файлов

Наверняка почти каждый сталкивался с ситуацией, когда при разработки какого-либо проекта, Вы, случайно сохранили изменения в каком-либо файле по ошибке, и отменить действие — нельзя. Например, я однажды редактировал одну картинку в фотошопе, и при сохранении по невнимательности выбрал для сохранения совсем другой файл, навсегда переписав его. На перерисовку того файла было потрачено полтора часа, и все это из-за того, что делать резервные копии каждые 20 секунд вручную невозможно.

Именно после этого случая мне в голову пришла идея написать программу, которая будет мониторить каждые N секунд указанный каталог и его подкаталоги на предмет добавления новых файлов и изменения старых. В случае если есть новые файлы или изменения в старых, то она сделает резервную копию этого файла в указанную папку под имя_файла_дата_время. При таком раскладе потерять какие-либо данные будет сложно, т.к. есть полная история всех изменений.

Такая программа была написана мною 2 года назад. Она не раз спасала мои проекты от разных случайностей, но вот совсем недавно я внес в нее несколько изменений, и сейчас презентую ее Вам.

Программа написана на Delphi. Сразу хочу сказать, что качество кода просто отвратительное, а переписывать ее всю — нет времени, т.к. свои функции она выполняет отлично. На Delphi я не писал ничего уже 2 года, и признаться, сильно отвык — отличие от PHP огромное.

Вот так выглядит главное окно программы
image

А вот так выглядит каталог, куда сохраняются копии
image

Лично я предпочитаю заливать копии на Dropbox — так уж точно потерять что-либо не удастся.

Выше я говорил, что внес недавно некоторые изменения. Конкретно: сделал так, что программа при каждом новом запуске не копирует снова все файлы, а копирует только изменившиеся. Для этого, в папке, где хранятся резервные копии, она создает файлик lastScan_[имя_профиля].ini в котором хранятся имена файлов и их md5 хэши.

Свои настройки программа хранит в реестре. Когда запущен мониторинг, кнопка «Закрыть» сворачивает программу в tray. В остальном, думаю все понятно и очевидно.

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

Скачать программу с исходниками можно здесь:
http://dl.dropbox.com/u/35608229/BackupMonitor.rar
http://narod.ru/disk/44036120001/BackupMonitor.rar.html
http://depositfiles.com/files/i9o9q17pg

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 26

    +20
    Что мешает поставить систему контроля версий?
      +3
      наверное то, что в sc придется проверять и коммитить файлы вручную каждые 20 секунд (при оригинальной постановке задачи).

      подозреваю что автору хватило бы стандартной Windows Shadow Copy, но видимо свой велосипед интереснее.
        –2
        Честно — я просто не знал об этом. Когда гуглил — ничего не нашел, скорее всего потому, что не знал как правильно сформулировать запрос.
      +1
      Для разработки Вам стоит попробовать Idea PHPStorm, там и сравнить версии можно будет.

      И, если я не ошибаюсь, можно просто хранить проект в дропбоксе, он сам версии сохранять будет.
        –2
        Спасибо, не знал про то, что dropbox ведет историю изменений файлов
          0
          Только последние 5 копий. Т.е. если вы за час внесете в файл 5 изменений — то затрете все, что было два часа назад
            0
            Специально посмотрел историю для файла плагина, который пишу на php.

            7 страниц по 10 изменений.Самая старая версия от 15 февраля 2012 года.
        +3
        DropBox сам по себе справляется с хранением ревизий.
          –2
          поздравляю, вы написали свой git
            +1
            Он немного по другому работает. Он делает копии файлов, не мержит их, не ведет ветки и так далее, а тупо и бесцеремонно их бекапит в какую-то папку.
            +6
            У вас принципиально неверный подход, нужно использовать не таймер, а систему нотификаций ОС, благо что Винда шлет сообщения на каждый чих при работе с файлом.
              0
              Ага, и не копировать вручную, а коммитить в любую VCS — можно запускать локальный сервер.
              0
              Система авто бекапов файлов не плохая вещь.

              Часто приходиться работать с сайтами в живую на фтп и бывают некоторые казусы в стиле «Перезаписал файл, закрыл редактор и все».

              Но в редактор встроен функционал авто-бекапирования сохраняемых файлов, а значит бекап всего, что в нем редактировалось. Уже с 2 десятка раз помогало, а один раз спасло шкуру (удалил случайно папочку /var/www на рабочей машине с одним сайтом, которого более нигде не было)

              Генерирует конечно много мусора, за 3 месяца 180 мегабайт, но если архивировать все это в tar.gz, то этот архив превращается в 18 мегабайт.

              Автор, лучше отправляйте исходники на github.
                +2
                Прочитал внимательно, пост. Увидел
                Программа написана на Delphi. Сразу хочу сказать, что качество кода просто отвратительное, а переписывать ее всю — нет времени


                Не отправляйте на гитхаб.
                0
                Просто оставлю это здесь
                ru.wikipedia.org/wiki/Source_Code_Management
                  +1
                  … написана на Delphi…… качество кода просто отвратительное...

                  Нет, серьезно, поставьте себе TortoiseGit и не мучайтесь.
                  • UFO just landed and posted this here
                      +2
                      Если уже пользуетесь дропбоксом, то чем его система хранения версий файлов не устраивает?
                      0
                      Вопрос тут возник в тему поста: есть ли аналог inotifywait для windows, что бы из шела можно было запустить?
                        0
                        FindFirstChangeNotification + ReadDirectoryChanges functions. Пример
                        Или SHChangeNotifyRegister.
                        Имхо поудобнее таймера.
                          –1
                          Под UNIX кто возмется написать на BASH простенького демона?
                          Можно сделать 2 sh файла. Один каждые 30 сек сверяет файлы с бэкапом второй добавляет проверяемые файлы в список в конфиге.
                          Также в конфиге например можно сделать место хранения или по группам.
                          Сверять можно время из ls -l c таким же файлом в бэкапе, если время новее то записать копию.
                          Думаю в 100 строк можно уложиться. Если будут желающие я возможно подучу и выкрою время для написания.
                            0
                            Ну раз на Delphi, то лучше используйте из JVCL компонент TJvChangeNotify

                            Only users with full accounts can post comments. Log in, please.