GNU/Linux >> Linux の 問題 >  >> Linux

テキスト ファイルに対するすべての変更の履歴を保持する

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 のような他の多くの外部ツール 、 bashtarrcloneborg など

詳細はこちら

後で wiki/フォーラムを読みたい場合は、ローカルで git clone してオフラインで読むこともできます:

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

ウェブサイト、フォーラム (すべてマークダウンなので、ダウンロードは非常に高速です...)、コードベース (Haskell です!) など


特定のファイル システム内のすべてのファイルをカバーする別のアプローチは、NILFS などのログ構造のファイル システムを使用することです。

このようなファイル システムは変更を追加しますが、データを置き換えません。これは事実上、継続的なスナップショット作成 (またはチェックポイント作成) と同等であり、過去のさまざまな時点でファイル システムを再訪することができます。古いチェックポイントは、一定の経過時間に達するとガベージ コレクションされる傾向がありますが、チェックポイントを永続的なスナップショットに変えることができます。たとえば、先月は 1 時間ごとに 1 つのスナップショットを保持し、その後は 1 日ごとに 1 つのスナップショットを保持するように自動化できます。 6 か月間、その後は 1 週間に 1 回など

NILFS は Linux で十分にサポートされており、/home で使用すると非常に効果的です .


Linux
  1. そのすべてがドットファイルにあります-YADMとHomeshick

  2. ファイルの最初の行の前にテキストを挿入する方法は?

  3. ファイルを切り捨てない「dd」の代わりに使用しますか?

  1. フォルダ内のすべてのファイルにテキストを追加しますか?

  2. ファイルが開いているVim/tmuxを見つけることは可能ですか?

  3. Linuxのコマンドラインを使用してファイルを作成する

  1. ファイルの先頭にテキストを挿入する方法は?

  2. Git リポジトリを削除しますが、すべてのファイルを保持します

  3. テキスト ファイルの表示割合を表示できませんか?