私は Unison を使用して、自宅のコンピューターと職場のコンピューター間でいくつかのファイルを同期しています。ただし、2 台のコンピューターは SSH 経由で直接接続できないため、USB サムドライブ (権限を維持するために ext4 でフォーマット) 経由で同期しています。
私が抱えている問題は、Unison が同期プロファイルの構成をフォルダー自体ではなくローカル (.unison ディレクトリ) に保存することです。つまり、無視されるファイルなどの一部の情報は、保持している 2 つのプロファイルに複製する必要があります。
2 台のコンピューター間で同期プロファイルを自動的に同期させる方法はありますか?
答え1
プロファイルは同期するディレクトリ内に保存します。 内に~/.unison
、実際のプロファイルへのシンボリックリンクを配置します。 これは私にとってはうまく機能しています。 また、新しいマシンをすばやく「ブートストラップ」することもできます。 USB ドライブから新しいコンピューターにプロファイルをコピーし、新しく開始するだけです。
1つだけ「落とし穴」があります。無視するプロファイル(1台のコンピュータ)に、USBドライブにすでに存在するファイルと一致する行が追加された場合、そのファイルは、次のUnison同期時にUSBドライブから他のコンピュータに転送されます。無視する理由は、プロファイルは転送される予定だが、他のコンピュータでは、次同期。それ以外にはまだ問題は発生していません。
答え2
私が最終的に行った代替策は、2段階の同期を行うことです。私はユニゾンプロファイルを同期するためのユニゾンプロファイルを持っています
#.unison/sneakernet-init.prof
label = Unison profiles
root = /home/hugo/.unison
root = /media/hugo/MYDRIVE/Sync/Unison
path = sneakernet-common # ignore rules, diff command, etc
path = sneakernet-dotfiles.prf # profile for my dotfiles
path = sneakernet-hugobox.prf # profile for my other stuff
次に、スクリプトを使用して各プロファイルを順番にunisonで実行します。
#syncronize-things.sh
unison-gtk sneakernet-init
unison-gtk sneakernet-dotfiles
unison-gtk sneakernet-hugobox
sync # Flush file system caches
このソリューションは、unison を 1 回ではなく 3 回実行する必要があるため、少し面倒ですが、unison プロファイルのいずれも同期する必要がないという利点があります (これにより、同じプロファイルで unison を 2 回実行しないと動作しないという奇妙な動作が発生します)。