web-dev-qa-db-ja.com

Unisonでサブディレクトリではなく、すべてのファイルをどのように無視しますか?

特定のルートのすべてのサブディレクトリのコンテンツを同期したいのですが、ルート自体のファイルはごくわずかです。そのためには、ignoreディレクティブを使用してすべてのファイルを無視し(すべてのサブディレクトリを保持)、ignorenotディレクティブを使用して保持したいいくつかのファイルを再度追加します。そうするために、私は次の2つのことを試みました:

  1. プロファイルにignore = Regex ^(?!.*\/).*$を追加して、スラッシュを含むルート内のエントリを除外する正規表現を追加します。ただし、これにより、次のようなエラーメッセージが表示され、それ以上の説明はありません。

    Malformed pattern "Regex ^(?!.*\/).*$"." 
    
  2. 最初にignore = Name ?*ですべてを無視し、次にignorenot = Path */*でスラッシュを含むすべてのパスを再度追加します。これは、ディレクトリを無視しないとこのように機能しないため、期待どおりに機能しませんでした。

非常に単純な問題のようですが、頭を悩ませることはできません。

3
soriak

あなたが望むことを正確に行うことは不可能のようです。 Unisonがファイルとディレクトリを同期するとき、Unisonは2つの違いを識別できますが、Unisonは、ユーザーができるように(たとえば、ディレクトリなどの前に/を付けることによって)それらを異なる方法で参照しません。どちらか一方に対するパターンマッチング。たとえば、deerという名前のディレクトリとルートphilの下にあるROOTという名前のファイルを同期すると、Unisonはそれらの名前を次のように認識します。

new dir  ---->      ROOT/deer
new file ---->      ROOT/phil

ROOT/deerROOT/philを区別することはできません。ここにいくつかの提案があります

  1. 各ディレクトリのプロファイルにpath = deer行を追加して、同期するディレクトリを手動で指定します。とにかく、これがユニゾンを構成する標準的な方法だと思います。次に、同期するルートディレクトリ内のファイル(たとえば、philという名前のファイル)について、phildeer/synced-root-files/のように同期されるディレクトリに移動してから、- シンボリックリンク そのファイルからルートディレクトリに戻る

    cd ROOT; ln -s ROOT/deer/synced-root-files/phil
    
  2. パターンマッチングできるルートディレクトリの命名規則を考案します。たとえば、do n't同期するファイルだけに名前を付け、ignore.philのような名前を付け、Unisonプロファイルに行を追加しますignore = Path ignore.*

パス仕様およびパスの無視へのリンクは次のとおりです。 ユニゾンマニュアルのセクションなので、将来の読者は簡単に見つけることができます。

1
Mike Pierce