git
を与える チャンス
強力なツールを使用することが問題になる理由がわかりません。 git
を実行する単純な bash スクリプトを作成するだけです 定期的に (cron
経由) または systemd
タイマー);コミットメッセージなどを自動生成
他の人がコメントで強調しているように、もちろん、ローカル リポジトリを作成することも可能です (詳細については、こことそこを参照してください)。
<ブロック引用>
独自のリモート リポジトリをホストする場合は、「ベア リポジトリ」をセットアップする必要があります。両方 git init
および git clone
--bare
を受け入れる
ボーグのバックアップ
ボーグバックアップもお勧めできます。以下を提供します:
- タイムスタンプ
borg diff
(スナップショット間の比較)- プルーニング (古いスナップショットを削除します。たとえば、当月のスナップショットは毎日必要ですが、それ以外は月に 1 つだけ必要です)
- 暗号化 (オプション)
- 圧縮 (オプション)
- 他にも...
優れた点は、非常に柔軟であることです。セットアップは簡単ですが、必要に応じて多くのオプションを利用できます。
役立つかもしれないクイック スタート ガイドを書いたことがあります。
これを行うにはいくつかの方法があります:
- ヴィム
- Emacs
- Git
- Bash/外部ツール
- Git-annex (オールインワン ソリューション)
詳細はこちら:
- Vim でこれを行う場合:
次に、(名前が示すように) undo
の行為に関連するだけでなく、元に戻す履歴を使用することをお勧めします。 Vim エディターでアクションを実行するだけでなく、保存したアクションも実行します。詳細はこちら
以下を .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
すべての変更/取り消しがディレクトリ undodir
の下に永続的に保持されるようにします あなたのローカル vimDir
の下で 、デフォルトでは .vim
のいずれかです ホームディレクトリ、または :version
の出力に記載されている他のディレクトリ または --version
コマンドラインで。
元に戻す履歴をさらに細かく制御するには、Undotree を使用してエクスペリエンスを補完することもお勧めします。
- Emacs でこれを行う場合:
同様のことを行う Undotree と呼ばれる同様の名前のパッケージがあります。元に戻す履歴の詳細については、こちらをご覧ください。
Git
をご希望の場合 解決策:
小さな bash スクリプトである git-autocommit を使用することをお勧めします。git は唯一の依存関係であり、現在の git ディレクトリ (起動する場所) で新しいファイル/または変更されたファイルを監視し、それらをコミットします。
Git
の性質を考えると ファイルへのすべての変更を保持し、本番/深刻なプロジェクトには適していませんが、コミットメッセージ/一般的なコミットメッセージ (いつでも編集/追加できる) がなくてもかまわない場合は便利なソリューションです。後で)
目的の git ディレクトリ (最初に git init
で作成されたディレクトリ) に移動した後、起動します。 特定のディレクトリ、公式マニュアルの詳細) のように:
screen -dmS namehere git-autocommit -i 1 -V
screen
を使用している場合 、 tmux
の場合 :
tmux new -n namehere git-autocommit -i 1 -V
それ以外の場合:
git-autocommit -i 1 -V
バックグラウンドで表示したくない場合は、これで十分です。
Bash
をご希望の場合 解決策:
inotify-tools
の使用をお勧めします またはより具体的には inotifywatch
これは、(その名前が示すように) ファイル/ディレクトリの変更を検出して監視し、それに対してアクションを実行できます (別の場所に保存するなど)。
inotifywatch
で使用するフラグ :
inotifywait -r -m -q -e close_write --format %w%f yourdirectorypathhere
ここに Bash
の例を示します 上記を使用したスクリプト:
#!/bin/bash
inotifywait -r -m -q -e close_write --format %w%f directorytowatch | while IFS= read -r file; do
process $file
done
どこで process
tar
のように、何でもかまいません。 ファイルの変更時にバックアップを作成する場合、または rclone
を使用する場合 どこかにアップロードしたい場合は...
- オールインワン ソリューションが必要な場合:
git-annex
をお勧めします Git
だけでなく、 inotify-tools
のような他の多くの外部ツール 、 bash
、 tar
、 rclone
、 borg
など
詳細はこちら
後で wiki/フォーラムを読みたい場合は、ローカルで git clone してオフラインで読むこともできます:
git clone git://git-annex.branchable.com
ウェブサイト、フォーラム (すべてマークダウンなので、ダウンロードは非常に高速です...)、コードベース (Haskell です!) など
特定のファイル システム内のすべてのファイルをカバーする別のアプローチは、NILFS などのログ構造のファイル システムを使用することです。
このようなファイル システムは変更を追加しますが、データを置き換えません。これは事実上、継続的なスナップショット作成 (またはチェックポイント作成) と同等であり、過去のさまざまな時点でファイル システムを再訪することができます。古いチェックポイントは、一定の経過時間に達するとガベージ コレクションされる傾向がありますが、チェックポイントを永続的なスナップショットに変えることができます。たとえば、先月は 1 時間ごとに 1 つのスナップショットを保持し、その後は 1 日ごとに 1 つのスナップショットを保持するように自動化できます。 6 か月間、その後は 1 週間に 1 回など
NILFS は Linux で十分にサポートされており、/home
で使用すると非常に効果的です .