GNU/Linux >> Belajar Linux >  >> Linux

Simpan riwayat semua modifikasi pada file teks

Berikan git kesempatan

Saya tidak mengerti mengapa menggunakan alat yang ampuh merupakan masalah. Cukup tulis skrip bash sederhana yang menjalankan git berkala (melalui cron atau systemd pengatur waktu); buat pesan komit secara otomatis, dll.

Seperti yang disorot orang lain dalam komentar, tentu saja - dimungkinkan untuk membuat repositori lokal (lihat di sana-sini untuk detail lebih lanjut).

Jika Anda lebih suka menghosting repo jarak jauh Anda sendiri, Anda harus menyiapkan "Bare Repository". Keduanya git init dan git clone terima --bare argumen.

Borg backup

Saya juga dapat merekomendasikan cadangan borg. Ini menawarkan Anda:

  • Stempel waktu
  • borg diff (bandingkan antar snapshot)
  • Pemangkasan (singkirkan snapshot lama - katakanlah Anda ingin snapshot untuk bulan ini setiap hari tetapi sebaliknya hanya satu per bulan)
  • Enkripsi (opsional)
  • Kompresi (opsional)
  • dan banyak lagi...

Kerennya, ini sangat fleksibel - mudah disiapkan tetapi memberi Anda banyak opsi jika Anda mau.

Saya pernah menulis panduan memulai cepat yang mungkin bisa membantu.


Ada beberapa cara yang dapat Anda lakukan:

  • Vim
  • Emacs
  • Git
  • Alat Bash/Eksternal
  • Git-annex (solusi lengkap)

Yang semuanya dirinci di sini:

  • Jika Anda ingin melakukan ini di Vim:

Maka saya akan merekomendasikan menggunakan undo history, yang tidak hanya (seperti namanya) berhubungan dengan tindakan undo melakukan tindakan di editor Vim, tetapi juga yang Anda simpan juga. Selengkapnya di sini.

Menambahkan yang berikut ke .vimrc Anda :

let vimDir = '$HOME/.vim'
let &runtimepath.=','.vimDir

" Keep undo history across sessions by storing it in a file
if has('persistent_undo')
    let myUndoDir = expand(vimDir . '/undodir')
" Create dirs
    call system('mkdir ' . vimDir)
    call system('mkdir ' . myUndoDir)
    let &undodir = myUndoDir
    set undofile
endif

Akan membuatnya sehingga setiap perubahan/pembatalan akan disimpan secara permanen di bawah direktori undodir di bawah vimDir lokal Anda , yang secara default adalah .vim di direktori home Anda, atau yang lain yang disebutkan di output :version atau --version pada baris perintah.

Untuk lebih mengontrol riwayat pengurungan Anda, sebaiknya gunakan juga Undotree untuk melengkapi pengalaman.

  • Jika Anda berencana melakukan ini di Emacs:

Ada paket bernama serupa yang disebut Undotree, yang melakukan hal serupa. Informasi lebih lanjut tentang Urungkan riwayat di sini.

  • Jika Anda lebih suka Git solusi:

Saya akan merekomendasikan menggunakan git-autocommit, yang merupakan skrip bash kecil, dengan git karena hanya dependensi, yang melihat direktori git saat ini (tempat Anda meluncurkannya) untuk file baru/atau file yang dimodifikasi, dan komit.

Mengingat sifat dari Git itu menyimpan setiap perubahan pada file, dan meskipun tidak cocok untuk produksi/proyek serius, ini adalah solusi yang berguna jika Anda tidak keberatan tidak memiliki pesan komit/pesan komit umum (yang selalu dapat Anda edit/tambahkan nanti).

Luncurkan setelah menavigasi di direktori want git (yang pertama kali dibuat dengan git init pada direktori tertentu, info lebih lanjut tentang manual resmi) seperti:

screen -dmS namehere git-autocommit -i 1 -V

jika Anda menggunakan screen , untuk tmux :

tmux new -n namehere git-autocommit -i 1 -V

jika tidak:

git-autocommit -i 1 -V

akan cukup jika Anda memilih untuk tidak menjadikannya latar belakang.

  • Jika Anda lebih suka Bash solusi:

Saya akan merekomendasikan menggunakan inotify-tools atau lebih tepatnya inotifywatch yang dapat mendeteksi dan (seperti namanya) melihat file/direktori untuk perubahan, yang kemudian dapat Anda lakukan tindakan terhadapnya (seperti menyimpannya di tempat lain, dll).

Di sini bendera untuk digunakan dengan inotifywatch :

inotifywait -r -m -q -e close_write --format %w%f yourdirectorypathhere

dan ini contoh Bash skrip menggunakan yang di atas:

#!/bin/bash
inotifywait -r -m -q -e close_write --format %w%f directorytowatch | while IFS= read -r file; do

    process $file
done

Dimana process bisa apa saja yang Anda inginkan, seperti tar jika Anda ingin membuat cadangan pada modifikasi file, atau dengan rclone jika Anda ingin mengunggahnya di suatu tempat...

  • Jika Anda menginginkan solusi menyeluruh:

Saya akan merekomendasikan git-annex yang tidak hanya mencakup Git tetapi banyak alat eksternal lainnya, seperti inotify-tools , bash , tar , rclone , borg dll.

Info lebih lanjut di sini.

Jika Anda ingin membaca wiki/forum nanti, Anda juga dapat mengkloningnya secara lokal, untuk membaca offline:

git clone git://git-annex.branchable.com

untuk situs web, forum (semuanya dalam penurunan harga, jadi sangat cepat untuk mengunduh...), dan basis kode (ada di Haskell!) dll


Pendekatan lain, yang akan mencakup semua file dalam sistem file tertentu, adalah menggunakan sistem file berstruktur log seperti NILFS.

Sistem file seperti itu menambahkan perubahan, mereka tidak mengganti data. Ini secara efektif setara dengan snapshot terus menerus (atau lebih tepatnya, checkpointing), dan memungkinkan Anda untuk mengunjungi kembali sistem file di berbagai titik di masa lalu. Pos pemeriksaan yang lebih lama cenderung menjadi sampah yang dikumpulkan setelah mencapai usia tertentu, tetapi pos pemeriksaan dapat diubah menjadi snapshot permanen, dan dimungkinkan untuk mengotomatiskannya, misalnya menyimpan satu snapshot per jam selama sebulan terakhir, lalu satu per hari selama enam bulan, lalu satu per minggu, dll.

NILFS didukung dengan baik di Linux dan cukup efektif bila digunakan untuk /home .


Linux
  1. Tampilkan Semua File Hingga Pertandingan?

  2. Apakah Mungkin Menemukan Vim/tmux Yang Filenya Terbuka?

  3. Bagaimana cara menyisipkan teks di awal file?

  1. Hapus repositori Git, tetapi simpan semua file

  2. Cat rekursif semua file menjadi satu file

  3. Bagaimana cara menyimpan riwayat bash saya di seluruh sesi?

  1. Penggunaan lanjutan dari penampil file teks yang lebih sedikit di Linux

  2. Semuanya ada di file titik - YADM dan Homeshick

  3. Bagaimana saya bisa meraster semua teks dalam PDF?