GNU/Linux >> Belajar Linux >  >> Linux

Pembuatan versi otomatis setelah perubahan file (modifikasi/buat/hapus)

1. Metode tujuan umum menggunakan bazaar &inotify

Ini belum teruji oleh saya tetapi saya menemukan tulisan ini menggunakan bzr (bazar) &inotifywait untuk memantau direktori dan mengontrol versi file di dalamnya menggunakan bazaar.

Skrip ini melakukan semua pekerjaan mengawasi direktori untuk perubahan:

#!/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. Mengelola /etc

Untuk kasus khusus mengelola /etc sistem Anda direktori, Anda dapat menggunakan app etckeeper.

etckeeper adalah kumpulan alat untuk membiarkan /etc disimpan dalam repositori git,mercurial, darcs, atau bzr. Itu terhubung ke apt (dan manajer paket lainnya termasuk yum dan pacman-g2) untuk secara otomatis melakukan perubahan yang dibuat ke /etc selama peningkatan paket. Ini melacak metadata file yang biasanya tidak didukung oleh sistem kontrol revisi, tetapi itu penting untuk /etc, seperti izin /etc/shadow. Ini cukup modular dan dapat dikonfigurasi, sekaligus mudah digunakan jika Anda memahami dasar-dasar bekerja dengan kontrol revisi.

Berikut tutorial yang bagus untuk memulainya.

3. Menggunakan git dan incron

Teknik ini menggunakan git dan incron . Untuk metode ini, Anda perlu melakukan hal berikut:

A. Buat repo

% mkdir $HOME/git
% cd $HOME/git
% git init

B. Buat $HOME/bin/git-autocommit skrip

#!/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. Tambahkan entri ke incrontab

% sudo incrontab -e $HOME/srv IN_MODIFY,IN_CREATE,IN_MOVED_FROM,IN_MOVED_TO $HOME/bin/git-autocommit

4. Menggunakan Flashbake

Pilihan lainnya adalah menggunakan alat seperti Flashbake. Flashbake adalah sistem kontrol versi yang digunakan Cory Doctorow (dari BoingBoing yang terkenal) untuk menulis bukunya.

Flashbake menggunakan git untuk melacak perubahan, tetapi berada di antara melakukan pencadangan otomatis dan menggunakan sendiri sistem kontrol versi biasa.

Cory ingin versi tersebut membawa prompt, snapshot di mana dia berada saat komit otomatis terjadi dan apa yang dia pikirkan. Saya dengan cepat membuat sketsa skrip Python untuk menarik informasi kontekstual yang dia inginkan dan mulai meretas bersama skrip shell untuk menggerakkan git, menggunakan keluaran skrip Python untuk komentar komit saat tugas cron menjalankan pembungkus shell.

Sumber daya

  • Revisi file otomatis saat diunggah

ZFS segera muncul di benak saya. Itu dapat membuat snapshot - dan ada beberapa proyek untuk membuat snapshot secara otomatis.


Saya pikir Anda berada di jalur yang benar dengan inotify . Artikel ini merinci penggunaan dasarnya dalam kasus yang mirip dengan kasus Anda. Saya sarankan untuk menggunakannya secara langsung, atau mengkompilasi utilitas tingkat kernel seperti fschange. Ini agak merepotkan, tetapi Anda kemudian dapat mengikat deteksi perubahan ke git commit atau serupa.

Kedua solusi tersebut memiliki masalah mengandalkan solusi pihak ketiga yang agak tidak sempurna. Jika Anda tidak keberatan mengotori tangan Anda, NodeJS menyediakan fasilitas lintas platform yang sangat baik (fs.watch) untuk tujuan yang tepat ini. Tutorial dasar tentang menonton file untuk perubahan di NodeJS dapat ditemukan di sini. Dalam beberapa lusin baris atau kurang, Anda dapat menulis sesuatu yang mengawasi direktori untuk file, lalu keluar (melalui proses_anak) dan menjalankan git commit atau serupa (atau bahkan secara manual menambah indeks file versi, jika Anda menyukai pendekatan roll-your-own).

fs.watch didukung oleh inotify di linux, tetapi jauh lebih intuitif untuk digunakan. Ada proyek NodeJS lain yang membungkus fungsionalitas menonton file itu dalam berbagai tingkat kenyamanan, seperti yang ini atau yang ini.


Linux
  1. Cara membuat file swap di Linux

  2. Cara Memodifikasi File Di Tempat?

  3. Buat `cut` Ubah File Di Tempat?

  1. Apa yang Dihitung Sebagai Modifikasi atau Perubahan File?

  2. Buat file swap Linux

  3. Perintah manajemen file Linux untuk membuat, menyalin, memindahkan, dan menghapus file

  1. Ubah tanggal pembuatan file

  2. Buat PEM dari file PPK

  3. Izinkan pemilik membuat &membaca file, tetapi tidak mengubah atau menghapus