特定のルートのすべてのサブディレクトリのコンテンツを同期したいのですが、ルート自体のファイルはごくわずかです。そのためには、ignore
ディレクティブを使用してすべてのファイルを無視し(すべてのサブディレクトリを保持)、ignorenot
ディレクティブを使用して保持したいいくつかのファイルを再度追加します。そうするために、私は次の2つのことを試みました:
プロファイルにignore = Regex ^(?!.*\/).*$
を追加して、スラッシュを含むルート内のエントリを除外する正規表現を追加します。ただし、これにより、次のようなエラーメッセージが表示され、それ以上の説明はありません。
Malformed pattern "Regex ^(?!.*\/).*$"."
最初にignore = Name ?*
ですべてを無視し、次にignorenot = Path */*
でスラッシュを含むすべてのパスを再度追加します。これは、ディレクトリを無視しないとこのように機能しないため、期待どおりに機能しませんでした。
非常に単純な問題のようですが、頭を悩ませることはできません。
あなたが望むことを正確に行うことは不可能のようです。 Unisonがファイルとディレクトリを同期するとき、Unisonは2つの違いを識別できますが、Unisonは、ユーザーができるように(たとえば、ディレクトリなどの前に/
を付けることによって)それらを異なる方法で参照しません。どちらか一方に対するパターンマッチング。たとえば、deer
という名前のディレクトリとルートphil
の下にあるROOT
という名前のファイルを同期すると、Unisonはそれらの名前を次のように認識します。
new dir ----> ROOT/deer
new file ----> ROOT/phil
ROOT/deer
とROOT/phil
を区別することはできません。ここにいくつかの提案があります
各ディレクトリのプロファイルにpath = deer
行を追加して、同期するディレクトリを手動で指定します。とにかく、これがユニゾンを構成する標準的な方法だと思います。次に、同期するルートディレクトリ内のファイル(たとえば、phil
という名前のファイル)について、phil
をdeer/synced-root-files/
のように同期されるディレクトリに移動してから、- シンボリックリンク そのファイルからルートディレクトリに戻る
cd ROOT; ln -s ROOT/deer/synced-root-files/phil
パターンマッチングできるルートディレクトリの命名規則を考案します。たとえば、do n't同期するファイルだけに名前を付け、ignore.phil
のような名前を付け、Unisonプロファイルに行を追加しますignore = Path ignore.*
。
パス仕様およびパスの無視へのリンクは次のとおりです。 ユニゾンマニュアルのセクションなので、将来の読者は簡単に見つけることができます。