Gitリポジトリのすべてのドットファイルをバックアップする簡単な方法を探しています。
私の目標ソリューション:
- 私のドットファイルの内容の情報源としてgitを使う
- 私のホームディレクトリでは、バックアップファイルはリポジトリ内のファイルへのシンボリックリンクになります。したがって、編集するとリポジトリでも編集されます。
- 1つのコマンドを使用して、リポジトリ内のすべてのファイルへのシンボリックリンクを作成できます(ディレクトリ構造は保持されますが、ファイルのみリンクする必要があります)。
たとえば、次のバックアップストレージ構造があります。
.config
|_ nvim
|_ init.lua
.tmux
|_ tmux.conf
.zshrc
私はこの構造を得たいと思います。
home
|_ .config
| |_ (other contents)
| |_ nvim
| |_ (other contents)
| |_ link to init.lua
|_ .tmux
| |_ (other contents)
| |_ link to tmux.conf
|_ link to .zshrc
|_ (other home files and directories)
バックアッププロセスが開始される前に他のコンテンツが存在する可能性があるため、バックアップやバックアッププロセスの影響を受けないでください。
驚くべきことに、既存のソリューションが見つかりません。私はできると思いますrsync
が、インターネット検索ではこれを行う方法に対する答えを提供しません。単純なbashスクリプトをハックしようとしていますが、テストや多数のエッジケースに陥っています(たとえば、無視して.
各ディレクトリごとにサブディレクトリに再帰..
する.git
など)。
これを行うユーティリティがあることを確認してください。誰かが私にそれを指摘できますか?それともこれを実行できるスクリプトはすでにありますか?
修正する:
Stéphaneのコメントのアイデアを使って、ユースケースcp
を完全にカバーするこのスクリプトを作成しました。
find ./dotfiles -maxdepth 1 -mindepth 1 | xargs realpath | xargs -i cp {} $HOME -rs --remove-destination
答え1
Gitで追跡するシンボリックリンクを作成するときに重要な注意があります。ソースファイルへの参照パスは、マシンへの絶対パスではなくリポジトリに相対的でなければなりません。
Gitリポジトリには適していません。
ln -s /Users/gio/repo/foo.md ./bar/foo.md
Gitリポジトリに最適
cd ./bar && ln -s ../foo.md foo.md
これがあなたが望むものです。
ディレクトリの作成(例:バックアップ)
mkdir backup
それからcd backup
次に、gitリポジトリにしますgit init
(オプションで設定用のフォルダを作成します)。
後でやるln -s /path/to/file/
それからテストしてみてくださいgit add .
git commit "test a symlink"
git push
完了したら、ファイルを編集してコミット/プッシュを再開してください。
これでファイルを更新でき、正しく更新され、GitHubはファイルを素敵にレンダリングします。