GNU/Linux >> Znalost Linux >  >> Linux

Uchovávejte historii všech úprav v textovém souboru

Zadejte git šance

Nechápu, proč je problém používat mocný nástroj. Stačí napsat jednoduchý bash skript, který spustí git pravidelně (prostřednictvím cron nebo systemd časovače); automaticky generovat zprávy potvrzení atd.

Jak jiní zdůraznili v komentářích, je samozřejmě možné vytvořit místní úložiště (více podrobností zde a tam).

Pokud dáváte přednost hostování vlastního vzdáleného repozitáře, budete muset nastavit „holé úložiště“. Oba git init a git clone přijmout --bare argument.

Borg záloha

Mohu také doporučit borg backup. Nabízí vám:

  • Časová razítka
  • borg diff (porovnání mezi snímky)
  • Prořezávání (zbavte se starších snímků – řekněme, že chcete snímek za aktuální měsíc každý den, ale jinak pouze jeden za měsíc)
  • Šifrování (volitelné)
  • Komprese (volitelné)
  • a mnohem více...

Skvělé je, že je velmi flexibilní – snadno se nastavuje, ale pokud chcete, nabízí vám spoustu možností.

Jednou jsem napsal průvodce rychlým startem, který by mohl pomoci.


Existuje několik způsobů, jak to udělat:

  • Vim
  • Emacs
  • Git
  • Bash/Externí nástroj
  • Git-annex (řešení vše v jednom)

Všechny jsou podrobně popsány zde:

  • Pokud to chcete provést ve Vimu:

Pak bych doporučil použít historii vrácení zpět, která se nejen (jak název napovídá) týká aktu undo akci v editoru Vim, ale také tu, kterou uložíte. Více zde.

Přidání následujícího do vašeho .vimrc :

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

Udělá to tak, že všechny změny/vracení budou trvale uloženy v adresáři undodir pod vaším místním vimDir , což je ve výchozím nastavení buď .vim ve vašem domovském adresáři nebo v jiných adresářích uvedených ve výstupu :version nebo --version na příkazovém řádku.

Pro ještě větší kontrolu nad vaší historií vracení doporučuji také použít Undotree k doplnění zážitku.

  • Pokud to plánujete na Emacsu:

Existují podobně pojmenované balíčky s názvem Undotree, které dělají podobné věci. Další informace o historii vrácení zpět zde.

  • Pokud dáváte přednost Git řešení:

Doporučil bych použít git-autocommit, což je malý bash skript, s git, protože jsou to pouze závislosti, které sledují aktuální adresář git (kde jej spouštíte) pro případné nové soubory/nebo upravené soubory, a odevzdávají je.

Vzhledem k povaze Git uchovává všechny změny v souboru, a přestože by nebyl vhodný pro produkční/seriózní projekt, je to užitečné řešení, pokud vám nevadí, že nemáte zprávu o odevzdání / obecnou zprávu o odevzdání (kterou můžete vždy upravit/přidat později).

Spusťte jej po navigaci v požadovaném adresáři git (který je nejprve vytvořen pomocí git init na konkrétním adresáři, více informací v oficiálním manuálu) takto:

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

pokud používáte screen , pro tmux :

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

jinak:

git-autocommit -i 1 -V

bude stačit, pokud ji nechcete na pozadí.

  • Pokud dáváte přednost Bash řešení:

Doporučuji použít inotify-tools nebo přesněji inotifywatch který dokáže detekovat a (jak už název napovídá) sledovat změny v souboru/adresáři, se kterými pak můžete provést akci (např. uložit někam jinam atd.).

Zde příznak, který se má použít s inotifywatch :

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

a zde příklad Bash skript pomocí výše uvedeného:

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

    process $file
done

Kde process může být cokoli, co chcete, například tar pokud chcete provést zálohu při změně souboru nebo pomocí rclone pokud to chcete někam nahrát...

  • Pokud chcete řešení typu vše v jednom:

Doporučil bych git-annex které nezahrnují pouze Git ale mnoho dalších externích nástrojů, jako je inotify-tools , bash , tar , rclone , borg atd.

Více informací zde.

Pokud si budete chtít přečíst wiki/fórum později, můžete je také git naklonovat lokálně pro offline čtení:

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

pro web, fórum (vše je v markdown, takže se to stahuje velmi rychle...) a kódovou základnu (je v Haskell!) atd


Dalším přístupem, který pokryje všechny soubory v daném souborovém systému, je použití souborového systému se strukturou log, jako je NILFS.

Takové systémy souborů připojují změny, nenahrazují data. To je v podstatě ekvivalent nepřetržitého snímkování (nebo spíše kontrolního bodu) a umožňuje vám znovu navštívit souborový systém na různých místech v minulosti. U starších kontrolních bodů je pravděpodobné, že budou shromažďovány odpadky, jakmile dosáhnou určitého věku, ale kontrolní body lze přeměnit na trvalé snímky a je možné to automatizovat, například tak, aby se za poslední měsíc uchovával jeden snímek za hodinu a poté jeden za den. po dobu šesti měsíců, poté jednou týdně atd.

NILFS je v Linuxu dobře podporován a je docela efektivní při použití pro /home .


Linux
  1. Jak vložit text před první řádek souboru?

  2. Uložit veškerý výstup z terminálu do souboru?

  3. Je možné zjistit, který Vim/tmux má soubor otevřený?

  1. Jak vložit text na začátek souboru?

  2. Odstraňte úložiště Git, ale ponechte všechny soubory

  3. Rekurzivní kat všechny soubory do jednoho souboru

  1. Jak zazipujete soubor a uchováte soubor .gz?

  2. Mohl by méně zobrazit zobrazený podíl textového souboru?

  3. Jak mohu rastrovat veškerý text v PDF?