Skip to content

Push・Pull・履歴 ​

sshcは同期時に自動マージを行いません。ローカルとリモートのスナップショットを比較し、送信するか受信するかを選べます。

通常の流れ ​

  1. [バケットの状態を更新]で、最新のスナップショットと履歴を取得
  2. [変更を確認]で、追加、変更、削除の差分を表示
  3. ローカルを正とするならPush、リモートを正とするならPullを選択
  4. 競合や削除がある場合は、対象を確かめてからForce PushまたはForce Pullを選択

sshc sync nowは、設定された同期方向に従って1回だけ自動同期を実行します。送受信では、競合せず、受信によってローカルファイルが削除されない変更を先に取り込み、その後でローカルの変更を送信します。受信専用では受信だけ、送信専用では送信だけを行います。両側の変更が競合する場合、受信によってローカルファイルが削除される場合、確認済みのリモート履歴が移動・削除されている場合は、何も上書きせずに停止します。

競合プレビューでは、内容だけでなくファイルの権限差も、前回の同期、このマシン、リモートに分けて表示します。0600や0700に加え、秘密鍵を0400、実行可能ファイルを0500で保管している場合も、表示された権限を確認してから置き換えられます。

自動同期 ​

自動同期を有効にすると、Vaultのロックが解除されている間、1分ごとにリモートの更新を確認します。この確認だけではアップロードされません。sshcで設定を変更した場合は、最後の変更から5秒間ほかの変更がなければ1回だけPushされます。外部エディタによる変更も次の更新確認で検出され、同じ5秒待機を経てPushされます。リモート側が更新されていれば、Pullできるか、停止すべきかを先に判断しています。

同期方向によって、自動処理の範囲が変わります。

同期方向リモート確認PullPush
送受信1分ごと競合と削除がない場合ローカル変更の5秒後
受信専用1分ごと競合と削除がない場合行わない
送信専用1分ごと/送信時に条件確認行わないローカル変更の5秒後

受信専用でリモートの履歴が分岐すると、自動受信はローカルの巻き戻しを避けるため停止します。「現在のリモートを確認」で作成日時、作成元、変更されるファイルを確認し、リモートを正として受信できます。受信専用の操作はS3へ書き込みません。

強制操作 ​

Force Pushは、競合した内容をこのマシンの内容で置き換え、リモートを上書きする操作です。実行直前に、確認時と同じS3バケットおよびオブジェクトのパスを使っていることと、リモートが更新されていないことを再確認します。確認後に保存先を切り替えた場合や、別のマシンがリモートを更新した場合は何も上書きしません。

Force Pullは、競合や削除をリモート側の内容に合わせたプレビューを作ります。適用時に、確認したリモートスナップショットとローカルファイルが変わっていないことを再確認します。どちらかが変わっていれば、ローカルファイルへ書き込みません。

履歴 ​

sshcはS3バケットを確認し、最新のスナップショットと日付付きの履歴を表示します。画面を開いた直後は最新5件だけを表示し、[すべての履歴を表示]で残りを開けます。

履歴の一覧は復号せずに取得できますが、内容の差分確認や復元には暗号化キーが必要です。

受信専用のマシンで履歴を表示したり復元したりしても、S3上のスナップショットは書き換えません。

リモートのスナップショットは、スキーマv6だけを読みます。v0.24.0より前のsshcが書いたスキーマv5のスナップショットは読みません。v5のスナップショットが最新のまま残っている保存先は、送信できるマシンからForce Pushで上書きします。履歴に残るv5のスナップショットは、表示も復元もできません。

CLI ​

sh
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 on

sync pull --forceは現在のリモートを正としてプレビューし、確認後にリモートとローカルが変わっていなければ適用します。sync push --forceの--force指定は、競合した内容をローカル側の内容で置き換え、リモートを上書きするという明示的な確認です。実行前にWeb UIの[変更を確認]で差分を確認してください。

CIや画面のないホストでは--jsonを使い、終了コードと1つのJSONオブジェクトの両方を確認してください。