WoJ*_*WoJ 17 linux version-control versioning
我正在寻找一种机制的实现(在 Linux 上),该机制将自动且透明地版本化目录中的任何更改(递归)。这旨在作为标准版本控制(SVN、git 等)的补充(如果所有请求的功能都可用,则可能替换)
在 MS Windows 上执行此操作的产品是AutoVer(以便更好地了解要求)。我很想拥有类似的东西,但针对非图形环境中的 Linux。
我看到有人尝试在 Linux 上使用此功能,我发现最接近的是Subversion上的自动版本化,但在现有环境(例如,配置文件是本地的服务器)上实施并不明显。
也许有什么用inotify
?
在此先感谢您的指点!沃杰
这是我未经测试的,但我发现这篇文章使用bzr
(bazaar) &inotifywait
来监视目录并使用 bazaar 对其中的文件进行版本控制。
这个脚本完成了观察目录变化的所有工作:
#!/bin/bash
# go to checkout repository folder you want to watch
cd path/to/www/parent/www
# start watching the directory for changes recusively, ignoring .bzr dir
# comment is made out of dir/filename
# no output is shown from this, but wrinting a filename instead of /dev/null
# would allow logging
inotifywait –exclude \.bzr -r -q -m -e CLOSE_WRITE \
–format=”bzr commit -m ‘autocommit for %w/%f’” ./ | \
sh 2>/dev/null 1>&2 &
# disown the pid, so the inotify thread will get free from parent process
# and will not be terminated with it
PID=`ps aux | grep inotify | grep CLOSE_WRITE | grep -v grep | awk ‘{print $2}’`
disown $PID
# this is for new files, not modifications, optional
inotifywait –exclude \.bzr -r -q -m -e CREATE \
–format=”bzr add *; bzr commit -m ‘new file added %w/%f’” ./ | \
sh 2>/dev/null 1>&2 &
PID=`ps aux | grep inotify | grep CREATE | grep -v grep | awk ‘{print $2}’`
disown $PID
exit 0;
Run Code Online (Sandbox Code Playgroud)
对于管理系统/etc
目录的特殊情况,您可以使用应用程序etckeeper。
etckeeper 是一组工具,可让 /etc 存储在 git、mercurial、darcs 或 bzr 存储库中。它连接到 apt(以及其他包管理器,包括 yum 和 pacman-g2)以在包升级期间自动提交对 /etc 所做的更改。它跟踪修订控制系统通常不支持的文件元数据,但这对 /etc 很重要,例如 /etc/shadow 的权限。它非常模块化和可配置,同时如果您了解使用修订控制的基础知识,则使用起来也很简单。
这是一个很好的教程,可以帮助您开始使用它。
这种技术利用git
和incron
。对于此方法,您需要执行以下操作:
A.做一个回购
% mkdir $HOME/git
% cd $HOME/git
% git init
Run Code Online (Sandbox Code Playgroud)
B.创建$HOME/bin/git-autocommit
脚本
#!/bin/bash
REP_DIR="$HOME/git" # repository directory
NOTIFY_DIR="$HOME/srv" # directory to version
cd $REP_DIR
GIT_WORK_TREE=$NOTIFY_DIR /usr/bin/git add .
GIT_WORK_TREE=$NOTIFY_DIR /usr/bin/git commit -a -m "auto"
Run Code Online (Sandbox Code Playgroud)
C.在incrontab中添加一个条目
% sudo incrontab -e $HOME/srv IN_MODIFY,IN_CREATE,IN_MOVED_FROM,IN_MOVED_TO $HOME/bin/git-autocommit
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用像Flashbake这样的工具。Flashbake 是 Cory Doctorow(BoingBoing 名人)用来写书的版本控制系统。
Flashbake 在幕后使用 git 来跟踪更改,但介于自动备份和自己使用普通版本控制系统之间。
Cory 希望该版本带有提示、自动提交发生时他所在位置的快照以及他的想法。我迅速勾勒出一个 Python 脚本来提取他想要的上下文信息,并开始编写一个 shell 脚本来驱动 git,当 cron 作业调用 shell 包装器时,使用 Python 脚本的输出作为提交注释。
归档时间: |
|
查看次数: |
15096 次 |
最近记录: |