Skip to content

Push・Pull・履歴

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

通常の流れ

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

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

競合プレビューでは、内容だけでなくファイルの権限差も、前回の同期、この端末、リモートに分けて表示します。06000700に加え、秘密鍵を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上のスナップショットは書き換えません。

既存のスキーマv5のスナップショットは、復号と検証のあとで自動的にv6として読みます。受信専用端末はS3を書き換えません。送信できる端末からの次のpushで、ライブスナップショットとそれ以降の履歴がv6として保存されます。

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オブジェクトの両方を確認してください。