디렉토리의 모든 변경 사항을 자동으로 투명하게 (재귀 적으로) 버전 화하는 메커니즘의 구현 (Linux)을 찾고 있습니다. 이것은 표준 버저 닝 (SVN, git, …)에 추가하기위한 것입니다 (요청한 모든 기능을 사용할 수있는 경우 대체 가능).
이를 수행하는 MS Windows의 제품은 AutoVer입니다 (요구 사항을 더 잘 이해하기 위해). 나는 그런 것을 가지고 싶지만 그래픽이 아닌 환경에서 Linux를 목표로했습니다.
Linux 에서이 기능을 사용하려는 몇 가지 시도가 있다는 것을 알았습니다. 내가 찾은 가장 가까운 것은 Subversion에서 자동 버전 지정 이지만 기존 환경 (예 : 구성 파일이 로컬 인 서버)에서 구현하는 것은 분명하지 않습니다.
어쩌면 뭔가 일하고 inotify
있습니까?
어떤 조언을 주셔서 감사합니다! 와우
답변
1. 시장 및 이노 파이를 이용한 범용 방법
이것은 나에 의해 테스트되지 않았지만 (bazaar)를 사용 하고 디렉토리를 모니터링하고 bazaar를 사용하여 파일을 버전 제어하는 이 쓰기를 발견 했습니다.bzr
inotifywait
이 스크립트는 디렉토리의 변경 사항을 관찰하는 모든 작업을 수행합니다.
#!/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;
2. / etc 관리
시스템 /etc
디렉토리 를 관리하는 특별한 경우 에는 app etckeeper를 사용할 수 있습니다 .
etckeeper는 / etc를 git, mercurial, darcs 또는 bzr 저장소에 저장하는 도구 모음입니다. 패키지 업그레이드 중에 / etc에 대한 변경 사항을 자동으로 커밋하기 위해 apt (및 yum 및 pacman-g2를 포함한 다른 패키지 관리자)에 연결됩니다. 개정 제어 시스템이 일반적으로 지원하지 않지만 / etc / shadow의 권한과 같이 / etc에 중요한 파일 메타 데이터를 추적합니다. 모듈 식이며 구성이 가능하며 개정 제어 작업의 기본 사항을 이해하면 사용하기도 쉽습니다.
다음은 시작하기에 좋은 자습서 입니다.
3. 자식과 incron 사용하기
이 기술은 git
및 을 사용 incron
합니다. 이 방법을 사용하려면 다음을 수행해야합니다.
A. 리포지토리 만들기
% mkdir $HOME/git
% cd $HOME/git
% git init
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"
C. incrontab에 항목 추가
% sudo incrontab -e $HOME/srv IN_MODIFY,IN_CREATE,IN_MOVED_FROM,IN_MOVED_TO $HOME/bin/git-autocommit
4. 플래시 베이크 사용
또 다른 옵션은 Flashbake 와 같은 도구를 사용하는 것 입니다. Flashbake는 BoingBoing 명성의 Cory Doctorow가 자신의 책을 쓰는 데 사용하는 버전 관리 시스템입니다.
Flashbake는 후드 아래에서 git을 사용하여 변경 사항을 추적하지만 자동 백업과 일반 버전 제어 시스템을 직접 사용하는 것 사이에 있습니다.
Cory는 버전이 프롬프트, 자동 커밋이 발생한 시점의 스냅 샷 및 생각한 내용을 전달하기를 원했습니다. 필자는 원하는 컨텍스트 정보를 얻기 위해 Python 스크립트를 신속하게 스케치하고 cron 작업이 쉘 랩퍼를 호출했을 때 커밋 주석에 대한 Python 스크립트 출력을 사용하여 쉘 스크립트를 함께 해킹하여 git을 구동하기 시작했습니다.
자원
답변
답변
나는 당신이 올바른 길을 가고 있다고 생각합니다 inotify
. 이 기사에서는 귀하와 유사한 경우의 기본 사용법에 대해 자세히 설명합니다. 직접 사용하거나 fschange 와 같은 커널 수준 유틸리티를 컴파일하는 것이 좋습니다 . 이것은 번거로운 일이지만 변경 사항 감지 git commit
또는 유사한 항목 을 바인딩 할 수 있습니다.
이러한 솔루션은 모두 다소 불완전한 타사 솔루션에 의존하는 문제가 있습니다. 손이 더러워지는 것을 좋아하지 않는다면 NodeJS 는 이러한 정확한 목적을 위해 뛰어난 크로스 플랫폼 기능 ( fs.watch )을 제공합니다. NodeJS의 변경 사항에 대한 파일보기에 대한 기본 학습은 여기 에서 찾을 수 있습니다 . 수십 줄 이하에서 파일의 디렉토리를 감시 한 다음 ( child_process 를 통해 ) 셸 아웃 하고 git commit
비슷한 것을 실행 하거나 롤 파일을 원한다면 버전 파일 색인을 수동으로 증가시키는 것을 작성할 수 있습니다. 자신의 접근 방식).
fs.watch
지원을받습니다 inotify
리눅스에서,하지만 훨씬 더 직관적으로 사용하는 것입니다. 다른 NodeJS 프로젝트가 있습니다 그 랩이 파일보고 등의 편의 다양한 수준에서 기능 이 하나 또는 이 하나 .
답변
Linux에서 inotify (2)는 큰 트리를 볼 수 없지만 파일 시스템 요청을 svn 또는 git 호출로 변환하거나 svn / git 메타 데이터를 직접 변경하여 퓨즈 파일 시스템 (별도의 위치에 마운트 된)이이를 처리 할 수 있습니다.
이것은 매우 흥미로운 아이디어이지만 기존 구현에 대해서는 들어 본 적이 없습니다.
답변
이러한 스크립트는 작성하기 어렵지 않습니다.
내가 가장 좋아하는 버전은 git입니다.
다음 스크립트가해야합니다.
#!/bin/sh
git add .
git commit -am "my automatic commit"
디렉토리를 주기적으로 확인하거나 저장 후 편집기가 스크립트 가능한 호출인지 확인하십시오.
그러나 이렇게하면 큰 파일과 자동 저장과 같은 “무용 지 않은”파일을 제외하는 것이 좋습니다.
답변
SparkleShare ( http://sparkleshare.org )는 git을 기반으로하며 버전 제어를 통해 Dropbox-Like 기능을 구현하지만 ssh-server를 설정해야합니다 (localhost 일 수 있음).