Unisonを使用して、自宅のコンピューターと仕事用のコンピューターの間でいくつかのファイルを同期しています。ただし、2台のコンピューターはssh経由で直接接続できないため、USBサムドライブ(アクセス許可を保持するためにext4でフォーマットされています)を介して同期します。
私が抱えている問題は、Unisonが同期プロファイルの構成をフォルダー自体ではなくローカルに(.unisonディレクトリに)保存することです。これは、無視されたファイルなどの一部の情報を、私が保持している2つのプロファイルに複製する必要があることを意味します。
2台のコンピューター間で同期プロファイルを自動的に同期させる方法はありますか?
同期するディレクトリ内にプロファイルを保持します。内部~/.unison
、実際のプロファイルにシンボリックリンクを設定します。これは私にとってうまくいきました。また、新しいマシンをすばやく「ブートストラップ」することもできます。プロファイルをUSBドライブから新しいコンピューターにコピーして、新たに起動するだけです。
「落とし穴」が1つあります。すでにUSBドライブに存在するファイルと一致するignore行を(1台のコンピューター上の)プロファイルに追加すると、そのファイルはUSBドライブから他のコンピューターに転送されます。 ignore行にもかかわらず、次のユニゾン同期。その理由は、プロファイルが転送されるようにスケジュールされているが、next同期まで(他のコンピューターでは)有効ではないためです。それ以外はまだ問題ありません。
私が最終的に得た代替案は、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
次に、スクリプトを使用して、各プロファイルと順番にユニゾンを実行します
#syncronize-things.sh
unison-gtk sneakernet-init
unison-gtk sneakernet-dotfiles
unison-gtk sneakernet-hugobox
sync # Flush file system caches
このソリューションは、ユニゾンを1回ではなく3回実行する必要があるため、少し面倒ですが、ユニゾンプロファイルのいずれも同期を行わないという利点があります(これにより、ユニゾンを2回実行する必要があるという奇妙な動作が発生します。物事を機能させるための同じプロファイル)