Push・Pull・履歴
sshcは同期時に自動マージを行いません。ローカルとリモートのリビジョンを比較し、送信するか受信するかを選べます。
通常の流れ
- [バケットの状態を更新]で、最新のスナップショットと履歴を取得
- [変更を確認]で、追加、変更、削除の差分を表示
- ローカルを正とするならPush、リモートを正とするならPullを選択
- 競合や削除がある場合は、対象を確かめてからForce PushまたはForce Pullを選択
sshc sync nowは、設定された同期方向に従って1回だけ自動同期を実行します。送受信では、競合せず、受信によってローカルファイルが削除されない変更を先に取り込み、その後でローカルの変更を送信します。受信専用では受信だけ、送信専用では送信だけを行います。両側の変更が競合する場合、受信によってローカルファイルが削除される場合、確認済みのリモート履歴が移動・削除されている場合は、何も上書きせずに停止します。
競合プレビューでは、内容だけでなくファイルの権限差も、前回の同期、この端末、リモートに分けて表示します。0600や0700に加え、秘密鍵を0400、実行可能ファイルを0500で保管している場合も、表示された権限を確認してから置き換えられます。
自動同期
自動同期を有効にすると、Vaultのロックが解除されている間、1分ごとにリモートの更新を確認します。この確認だけではアップロードされません。sshcで設定を変更した場合は、最後の変更から5秒間ほかの変更がなければ1回だけPushされます。外部エディターによる変更も次の更新確認で検出され、同じ5秒待機を経てPushされます。リモート側が更新されていれば、Pullできるか、停止すべきかを先に判断しています。
同期方向によって、自動処理の範囲が変わります。
| 同期方向 | リモート確認 | Pull | Push |
|---|---|---|---|
| 送受信 | 1分ごと | 競合と削除がない場合 | ローカル変更の5秒後 |
| 受信専用 | 1分ごと | 競合と削除がない場合 | 行わない |
| 送信専用 | 1分ごと/送信時に条件確認 | 行わない | ローカル変更の5秒後 |
受信専用でリモートの履歴が分岐すると、自動受信はローカルの巻き戻しを避けるため停止します。「現在のリモートを確認」で作成日時、作成元、変更されるファイルを確認し、リモートを正として受信できます。受信専用の操作はS3へ書き込みません。
強制操作
Force Pushは、競合をこの端末の内容で解決し、リモートを上書きする操作です。実行直前に、確認時と同じS3バケットおよびオブジェクトのパスを使っていることと、リモートが更新されていないことを再確認します。確認後に保存先を切り替えた場合や、別の端末がリモートを更新した場合は何も上書きしません。
Force Pullは、競合や削除をリモート側の内容で解決したプレビューを作ります。適用時に、確認したリモートスナップショットとローカルファイルが変わっていないことを再確認します。どちらかが変わっていれば、ローカルファイルへ書き込みません。
履歴
sshcはS3バケットを確認し、最新のスナップショットと日付付きの履歴を表示します。画面を開いた直後は最新5件だけを表示し、[すべての履歴を表示]で残りを開けます。
履歴の一覧は復号せずに取得できますが、内容の差分確認や復元には同期キーが必要です。
受信専用端末で履歴を表示したり復元したりしても、S3上のスナップショットは書き換えません。
既存のスキーマv5のスナップショットは、復号と検証のあとで自動的にv6として読みます。受信専用端末はS3を書き換えません。送信できる端末からの次のpushで、ライブスナップショットとそれ以降の履歴がv6として保存されます。
CLI
sshc sync
sshc sync push --json
sshc sync push --force --json
sshc sync pull --json
sshc sync pull --force --json
sshc sync now --json
sshc sync auto onsync pull --forceは現在のリモートを正としてプレビューし、確認後にリモートとローカルが変わっていなければ適用します。sync push --forceの--force指定は、競合をローカル側で解決してリモートを上書きするという明示的な確認です。実行前にWeb UIの[変更を確認]で差分を確認してください。
CIや画面のないホストでは--jsonを使い、終了コードと1つのJSONオブジェクトの両方を確認してください。