Saya mencari implementasi (di Linux) dari suatu mekanisme yang secara otomatis dan transparan akan membuat perubahan dalam direktori (secara rekursif). Ini dimaksudkan sebagai tambahan (mungkin penggantian jika semua fitur yang diminta tersedia) ke versi standar (SVN, git, ...)
Produk pada MS Windows yang melakukan ini adalah AutoVer (untuk memiliki gagasan yang lebih baik tentang persyaratan). Saya ingin memiliki sesuatu seperti itu tetapi ditujukan untuk Linux dalam lingkungan non-grafis.
Saya melihat bahwa ada beberapa upaya untuk memiliki fungsi ini di Linux, yang terdekat saya temukan adalah autoversionning pada Subversion tetapi tidak jelas untuk diterapkan pada lingkungan yang ada (server di mana, misalnya, file konfigurasi adalah lokal).
Mungkin sesuatu bekerja dengan inotify
?
Terima kasih sebelumnya untuk petunjuk apa pun! WoJ
Jawaban:
1. Metode tujuan umum menggunakan bazaar & inotify
Ini belum diuji oleh saya, tetapi saya menemukan penulisan ini yang menggunakan
bzr
(bazaar) &inotifywait
untuk memantau direktori dan versi mengontrol file di dalamnya menggunakan bazaar.Script ini melakukan semua pekerjaan menonton direktori untuk perubahan:
2. Mengelola / dll
Untuk kasus khusus mengelola
/etc
direktori sistem Anda, Anda dapat menggunakan aplikasi dllkeeper .Berikut tutorial yang bagus untuk memulai.
3. Menggunakan git dan incron
Teknik ini memanfaatkan
git
danincron
. Untuk metode ini, Anda perlu melakukan hal berikut:A. Buat repo
B. Buat
$HOME/bin/git-autocommit
skripC. Tambahkan entri ke incrontab
4. Menggunakan Flashbake
Pilihan lain adalah menggunakan alat seperti Flashbake . Flashbake adalah sistem kontrol versi yang digunakan Cory Doctorow (dari BoingBoing fame) untuk menulis buku-bukunya.
Flashbake menggunakan git di bawah tenda untuk melacak perubahan tetapi berada di antara melakukan backup otomatis dan menggunakan sistem kontrol versi biasa.
Sumber daya
sumber
Segera ZFS terlintas dalam pikiran. Itu dapat membuat snapshot - dan ada beberapa proyek untuk secara otomatis membuat snapshots .
sumber
Saya pikir Anda berada di jalur yang benar
inotify
. Artikel ini merinci penggunaan dasarnya dalam kasus yang mirip dengan milik Anda. Saya menyarankan untuk menggunakannya secara langsung, atau mengkompilasi utilitas tingkat kernel seperti fschange . Ini adalah sesuatu yang merepotkan, tetapi Anda kemudian dapat mengikat deteksi perubahan kegit 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 menonton file untuk perubahan di NodeJS dapat ditemukan di sini . Dalam beberapa lusin baris atau kurang, Anda bisa menulis sesuatu yang mengawasi direktori untuk file, dan kemudian keluar (melalui child_process ) dan menjalankan
git commit
atau serupa (atau bahkan secara manual menambah indeks file versi, jika Anda suka roll-your- pendekatan sendiri).fs.watch
didukung olehinotify
di linux, tetapi jauh lebih intuitif untuk digunakan. Ada proyek NodeJS lain yang membungkus fungsi menonton file dalam berbagai tingkat kenyamanan, seperti ini atau ini .sumber
inotify
. Tapi terima kasih.inotify (2) di Linux tidak akan dapat menonton pohon besar, tetapi sistem file sekering (dipasang di lokasi yang terpisah) mungkin bisa mengatasinya, dengan menerjemahkan permintaan sistem file ke panggilan svn atau git, atau dengan mengubah metadata svn / git secara langsung.
Ini adalah ide yang sangat menarik, tetapi saya belum pernah mendengar implementasi yang ada.
sumber
Naskah seperti itu tidak sulit untuk ditulis.
Kontrol versi favorit saya adalah git.
skrip berikut harus melakukannya:
baik yang secara berkala memeriksa direktori Anda - atau jika editor Anda panggilan skrip setelah Anda simpan.
Tetapi jika Anda melakukannya seperti ini mungkin masuk akal untuk mengecualikan file besar dan mungkin beberapa "tidak berguna" seperti autosave.
sumber
SparkleShare ( http://sparkleshare.org ) didasarkan pada git dan mengimplementasikan fungsionalitas seperti-Dropbox dengan kontrol versi, tetapi Anda harus menyiapkan server ssh (bisa menjadi host lokal).
sumber
Saya sarankan Anda untuk mencoba NILFS. Lihat halaman tentang dan Anda akan dapat dengan cepat memutuskan di mana ini yang Anda cari atau tidak.
HTH
sumber
Ada juga cara "orang miskin" melakukan ini hanya dengan menggunakan rsync dan pekerjaan cron. Anda pada dasarnya mengandalkan fasilitas cadangan rsync dan menggunakan dua jalur terpisah ditambah awalan / akhiran untuk melacak file Anda.
Ini lebih kurang terlihat seperti ini: / usr / bin / rsync -a -A -X --backup --suffix =
date +".%Y-%m-%d_%H-%M-%S"
$ source_path $ backup_pathHasil akhir: Mengubah file yang disebut test_rsync di jalur sumber setelah eksekusi awal akan menghasilkan file yang disebut test_rsync.2017-02-09_11-00-01 yang dibuat di jalur cadangan.
Ada banyak masalah dengan ini (ini berfungsi jika Anda memiliki jumlah file yang layak saja dan akan gagal untuk perubahan yang terjadi antara dua kali berturut-turut rsync (1 menit dalam kasus saya)) tetapi mungkin cukup untuk kebutuhan Anda.
Jika kita berbicara di sini tentang samba berbagi daftar pengecualian mungkin dalam urutan, belum sempat untuk itu, aku takut.
Beri tahu saya jika Anda memperbaiki ini.
sumber
Berikut ini adalah skrip Python3 yang membuat VMS menyukai versi file otomatis menggunakan cap waktu yang ditambahkan ke nama file asli saat disimpan.
Saya telah memasukkan banyak komentar ke dalam skrip dan menjalankan setengah lusin skrip seperti itu di mesin ubuntu saya dengan hanya direktori yang berbeda di setiap versi skrip yang berbeda sehingga saya secara bersamaan memversi banyak direktori. Tidak ada penalti nyata untuk kinerja alat berat.
! / usr / bin / env python3
print ("PROYEK FILES VERSIONING STARTED") print ("version_creation.py") # tempatkan semua kode ini ke dalam skrip dari print nama ini ("run as .. 'python3 version_creation.py' dari command line") print ("ctrl ' c 'untuk berhenti ") cetak (" ") cetak (" Untuk menjalankan program di latar belakang ketik di bawah ini untuk baris perintah dan kemudian tutup jendela. ") cetak (" nohup python3 version_creation.py ") cetak (" .... untuk hentikan proses buka menu / administrasi / monitor sistem ... dan bunuh python3 ") print (" ") print (" Selalu simpan file ke direktori 'ProjectFiles' dan file versi ") print (" juga akan dibuat di direktori itu . ") print (" ") print (" ") print (" ") print (" ")
import shutil import os import time
--- atur interval waktu untuk memeriksa file baru (dalam detik) di bawah ini
- Interval ini harus lebih kecil daripada interval file baru muncul!
t = 10
--- atur direktori sumber (dr1) dan direktori target (dr2)
dr1 = "/ path / ke / source_directory"
dr2 = "/ path / ke / target_directory"
impor global impor os
dr1 = "/ home / michael / ProjectFiles" #keduanya asli dan versi akan disimpan ke direktori ini
dr2 = "/ home / michael / ProjectFileVersions"
sementara Benar:
cetak ("Kosong")
print ("1 Latest_file_path =", latest_file_path)
print ("2 originalname =", originalname)
print ("filecreation =", filecreation)
print ("fivesec_ago =", fivesec_ago)
print ("timedif =", timedif)
Bagikan
di bawah ini dimasukkan sebelumnya dan berfungsi tetapi saya suka skrip python di atas jauh lebih baik ...... (telah menggunakan python selama sekitar 3 jam)
sumber