Я ищу реализацию (в Linux) механизма, который бы автоматически и прозрачно версировал любые изменения в каталоге (рекурсивно). Предполагается, что это дополнение (возможно, замена, если все требуемые функции доступны) к стандартному версионированию (SVN, git, ...)
Продукт на MS Windows, который делает это, AutoVer (чтобы лучше понять требования). Я хотел бы иметь что-то подобное, но нацеленное на Linux в неграфической среде.
Я видел, что есть некоторые попытки использовать эту функциональность в Linux, самая близкая из них, которую я нашел, - это автоверсионирование в Subversion, но это не очевидно для реализации в существующих средах (серверах, где, например, файлы конфигурации являются локальными).
Может быть, что-то работает с inotify
?
Заранее спасибо за любые указатели! WOJ
Ответы:
1. Метод общего назначения с использованием базара и inotify
Это не проверено мной, но я нашел эту запись, которая использует
bzr
(базар) &inotifywait
для мониторинга каталога и контроля версий файлов в нем, используя базар.Этот скрипт выполняет всю работу по просмотру каталога на предмет изменений:
2. Управление / и т. Д.
Для особого случая управления системным
/etc
каталогом вы можете использовать приложение etckeeper .Вот хороший учебник, с которого можно начать.
3. Использование git и incron
Эта техника использует
git
иincron
. Для этого метода вам нужно сделать следующее:А. Сделайте репо
Б. Создать
$HOME/bin/git-autocommit
скриптC. Добавить запись в incrontab
4. Использование Flashbake
Другой вариант - использовать такой инструмент, как Flashbake . Flashbake - это система контроля версий, которую Кори Доктороу (из знаменитости BoingBoing) использует для написания своих книг.
Flashbake использует git для отслеживания изменений, но находится где-то между автоматическим резервным копированием и использованием простой системы контроля версий.
Ресурсы
источник
Тут же на ум приходит ZFS . Он может создавать снимки - и есть несколько проектов для автоматического создания снимков .
источник
Я думаю, что вы на правильном пути
inotify
. Эта статья подробно описывает его основное использование в случае, похожем на ваш. Я бы предложил использовать его напрямую или скомпилировать утилиту уровня ядра, такую как fschange . Это немного хлопотно, но вы можете привязать обнаружение изменений кgit commit
или подобному.Оба эти решения имеют проблему использования несовершенных решений сторонних производителей. Если вы не возражаете запачкать руки, NodeJS предоставляет отличное кроссплатформенное средство ( fs.watch ) для этой конкретной цели. Основное руководство по просмотру файлов на предмет изменений в NodeJS можно найти здесь . В несколько десятков строк или меньше вы могли бы написать что-то, что просматривает каталог для файлов, а затем выдает (через child_process ) и запускает
git commit
или подобное (или даже вручную увеличивает индекс файла версии, если вам нравится roll-your- собственный подход).fs.watch
поддерживаетсяinotify
Linux, но гораздо более интуитивно понятен в использовании. Существуют другие проекты NodeJS, которые оборачивают эту функцию просмотра файлов с различными уровнями удобства, как этот или этот .источник
inotify
. Но спасибо.inotify (2) в Linux не сможет наблюдать большое дерево, но файловая система fuse (смонтированная в отдельном месте), вероятно, могла бы справиться с этим, переводя запросы файловой системы в вызовы svn или git или изменяя метаданные svn / git напрямую.
Это очень интересная идея, но я не слышал ни о каких существующих реализациях.
источник
Такой сценарий не сложно написать.
Мой любимый контроль версий - это git.
следующий скрипт должен это сделать:
либо периодически проверяйте вашу директорию, либо, если ваш редактор вызывает сценарий после сохранения.
Но если вы делаете это таким образом, возможно, имеет смысл исключить большие файлы и, возможно, некоторые «бесполезные», такие как автосохранения.
источник
SparkleShare ( http://sparkleshare.org ) основан на git и реализует функциональность Dropbox-Like с контролем версий, но вы должны настроить ssh-сервер (может быть localhost).
источник
Я бы порекомендовал вам попробовать NILFS. Перейдите на страницу «О нас», и вы быстро сможете решить, что именно вы ищете или нет.
НТН
источник
Существует также способ «бедняков» сделать это, используя только rsync и работу cron. В основном вы полагаетесь на средство резервного копирования rsync и используете два отдельных пути плюс префикс / суффикс для отслеживания ваших файлов.
Более менее это выглядит так: / usr / bin / rsync -a -A -X --backup --suffix =
date +".%Y-%m-%d_%H-%M-%S"
$ source_path $ backup_pathКонечный результат: изменение файла с именем test_rsync в исходном пути после первоначального выполнения приведет к созданию файла с именем test_rsync.2017-02-09_11-00-01 в пути резервного копирования.
С этим связано множество проблем (это работает, если у вас есть только приличное количество файлов, и сбой при изменениях, которые происходят между двумя последовательными запусками rsync (в моем случае 1 минута)), но этого может быть достаточно для ваших нужд.
Если мы говорим здесь об общих ресурсах samba, то список исключений может быть в порядке, я пока не дошел до этого, я боюсь.
Дайте мне знать, если вы улучшите это.
источник
Вот скрипт Python3, который делает VMS как автоматическое управление версиями файлов, используя отметку времени, добавленную к исходному имени файла при сохранении.
Я добавил в сценарий кучу комментариев и запустил полдюжины таких сценариев на моей машине с Ubuntu, причем в каждой версии скрипта различались только каталоги, поэтому я одновременно создаю версии для нескольких каталогов. Нет реального штрафа в производительности машины.
! / usr / bin / env python3
print ("НАЧАТЬ ВЕРСИИ ФАЙЛОВ ПРОЕКТА") print ("version_creation.py") # поместить весь этот код в скрипт с таким именем print ("запустить как .. 'python3 version_creation.py' из командной строки") print ("ctrl ') c 'to stop ") print (" ") print (" Чтобы запустить программу в фоновом режиме ниже для командной строки, а затем закрыть окно. ") print (" nohup python3 version_creation.py ") print (" .... to остановить процесс перейти в меню / администрирование / системный монитор ... и уничтожить python3 ") print (" ") print (" Всегда сохранять файлы в каталог 'ProjectFiles' и файлы версий ") print (" также будет создан в этом каталоге . ") print (" ") print (" ") print (" ") print (" ")
импорт shutil импорт os время импорта
--- установите временной интервал для проверки новых файлов (в секундах) ниже
- этот интервал должен быть меньше интервала появления новых файлов!
т = 10
--- установить исходный каталог (dr1) и целевой каталог (dr2)
dr1 = "/ path / to / source_directory"
dr2 = "/ path / to / target_directory"
импорт глобус импорт ос
dr1 = "/ home / michael / ProjectFiles" # оба оригинала и версии будут сохранены в этом каталоге
dr2 = "/ home / michael / ProjectFileVersions"
пока верно:
печать («Пусто»)
print ("1 Latest_file_path =", latest_file_path)
print ("2 originalname =", originalname)
print ("filecreation =", filecreation)
print ("fivesec_ago =", fivesec_ago)
print ("timedif =", timedif)
доля
ниже был введен ранее и работает, но мне нравится вышеупомянутый скрипт на python намного лучше ...... (использую python около 3 часов)
источник