DotweaveDotweave
ドキュメントGitHub
DotweaveDotweave
    • はじめに
    • dotweave をインストールする
    • 最初の同期を設定する
    • 2 台目のデバイスを設定する
    • 同期のしくみ
    • ディレクトリとリポジトリの構造
    • 同期モード
    • プロファイル
    • プラットフォーム別パス
    • シークレットと暗号化
    • ファイルとディレクトリのトラッキング
    • 日々の push とコミットの流れ
    • 複数デバイスの同期を保つ
    • シェル補完を有効にする
    • エージェントスキルをインストールする
    • 設定とリポジトリ形式のアップグレード
    • 同期の問題を解決する
    • dotweave init
    • dotweave track
    • dotweave push
    • dotweave pull
    • dotweave status
    • dotweave untrack
    • dotweave cd
    • dotweave profile
    • dotweave doctor
    • dotweave autocomplete
    • dotweave skill
    • manifest.jsonc
    • settings.jsonc
    • 環境変数とパス
    • エラーメッセージ
ドキュメントGitHub
  1. Dotweave/
  2. 同期のしくみ

同期のしくみ

push と pull のパイプライン、dotweave が git を代わりに実行しない理由、dry run が報告する内容を説明します。

2 つのスナップショットと 1 つの計画

データを動かす dotweave のコマンドは、いずれも 2 つのスナップショットを作って比較します。ローカルスナップショットはホームディレクトリ配下のトラッキング対象パスをたどります。リポジトリスナップショットは、同期ディレクトリの profiles/ 配下にすでに保存されている artifact を読み取ります。

この 2 つの差分が計画です。dotweave status は両方向の計画を表示し、何も書き込みません。dotweave push はローカルからリポジトリへの方向で計画を適用し、dotweave pull は逆方向に適用します。

push と pull はどちらも --dry-run を受け取ります。計画を組み立てて表示するだけで、適用はしません。コマンドが何に触れるか確信が持てないときに使ってください。

push が書き込むもの

push はトラッキング対象のパスを読み、profiles/<profile>/ 配下の artifact をそれに合わせて書き直します。書き込む前に内容を比較するため、変更のないファイルには書き込みが一切発生しません。

normal の項目はそのままコピーされます。secret の項目は manifest.jsonc のすべての recipient 向けに暗号化され、.dotweave.secret サフィックスを付けて保存されます。シンボリックリンクは、リンク先を保持する <name>.dotweave.symlink ファイルとして保存されます。ignore の項目はスキップされます。

シークレットの比較では、保存された暗号文を復号して平文を比べます。そのため変更のないシークレットを push し直しても新しい暗号文は生まれず、git の履歴に意味のない差分が積み上がりません。

push は不要になった artifact も取り除きます。ほかのプラットフォームのオーバーライドや別プロファイルが所有する artifact は保護するため、Linux マシンから push しても Windows マシンが保存した内容は消えません。

dotweave push
· Pushing changes...
✔ Push complete
  plain: 2
  encrypted: 1
  symlinks: 0
  dirs: 1
  0 stale artifacts removed

pull が書き込むもの

pull は保存された artifact を読み、解決済みのローカルパスへ書き戻します。シークレットは先に keys.txt の identity で復号します。

ローカルへの書き込みはすべて、対象の隣にある一時ディレクトリで用意してから所定の位置へ rename します。そのため pull が中断されても、設定ファイルが半分だけ書かれた状態にはなりません。古いローカルパスは最も深いパスから上へ向かって削除し、ディレクトリはすべての子項目が削除予定になっているときだけ削除します。

pull は適用前に確認します。プロンプトを省くには --yes を渡してください。非対話型のターミナルでは推測せずにコマンドが失敗します。

pull はリポジトリに存在しないローカルファイルを削除します。最初の push より前は、すべてのトラッキング対象パスが Remove locally に並びます。先に dotweave status を実行してください。

dotweave は git を代わりに実行しません

push と pull はディスク上のファイルだけを変更します。どちらも git add、git commit、git push、git pull を実行しません。dotweave が git を参照するのは、同期ディレクトリがワークツリーかを確認するときと、どの artifact が不要かを判断するためにコミット済みのプロファイル名を調べるときだけです。

つまり公開は、独立した明示的な手順です。

dotweave push
dotweave cd
git add -A && git commit -m "Update config"
git push

dotweave にはデーモンもファイルシステム監視も、バックグラウンドプロセスもありません。コマンドを実行しない限り何も同期されません。

git が転送層なので、マシン間の分岐は git のコンフリクトであり、git で解決します。dotweave はマージしません。

実装とリファレンス

同期ディレクトリの構造はディレクトリとリポジトリの構造、項目ごとの mode の値は同期モードで説明しています。

適用せずに計画だけを見るには dotweave status、このモデルから生まれる日々の流れは日々の push とコミットの流れを参照してください。

← 前へ概要2 台目のデバイスを設定する既存の同期リポジトリを age の鍵とあわせて clone し、新しいマシンにトラッキング対象のファイルを復元します。→ 次へコンセプトディレクトリとリポジトリの構造dotweave がアプリデータディレクトリをどこに置くか、同期リポジトリの中に何があるか、artifact のサフィックスがファイル種別をどう表すかをまとめます。

このページの内容

  1. 2 つのスナップショットと 1 つの計画
  2. push が書き込むもの
  3. pull が書き込むもの
  4. dotweave は git を代わりに実行しません
  5. 実装とリファレンス