Como você ignora todos os arquivos, mas não os subdiretórios, com o Unison?

Como você ignora todos os arquivos, mas não os subdiretórios, com o Unison?

Quero sincronizar o conteúdo de todos os subdiretórios de uma determinada raiz, mas apenas alguns arquivos na própria raiz. Para fazer isso, gostaria de ignorar todos os arquivos que usam a ignorediretiva (mantendo todos os subdiretórios) e adicionar novamente os poucos arquivos que desejo manter com a ignorenotdiretiva. Para fazer isso, tentei as duas coisas a seguir:

  1. Adicionando um regex para excluir qualquer entrada na raiz que contenha uma barra adicionando ignore = Regex ^(?!.*\/).*$ao meu perfil. Mas isso resulta em uma mensagem de erro como segue, sem maiores explicações:

    Malformed pattern "Regex ^(?!.*\/).*$"." 
    
  2. Primeiro ignorando tudo com ignore = Name ?*e depois adicionando novamente todos os caminhos que contêm uma barra com ignorenot = Path */*, o que não funcionou como esperado, pois não ignorar os diretórios não funciona dessa maneira.

Parece ser uma questão muito simples, mas não consigo entender.

Responder1

Parece que não é possível fazer exatamente o que você deseja. Quando o Unison sincroniza um arquivo versus um diretório, o Unison pode dizer a diferença entre os dois, mas o Unison não se refere a eles de maneira diferente (por exemplo, prefixando a /para diretórios ou algo assim) de uma forma que permite ao usuário combinar padrões com um ou o outro. Por exemplo, se você sincronizar um diretório nomeado deere um arquivo nomeado philsob root ROOT, o Unison os verá nomeados como

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

Você não consegue distinguir entre ROOT/deere ROOT/phil. Aqui estão algumas sugestões

  1. Especifique manualmente os diretórios que deseja sincronizar adicionando uma linha path = deerao seu perfil para cada diretório. De qualquer forma, acho que esta é a maneira padrão de configurar o Unison. Então, para quaisquer arquivos em seu diretório raiz que você deseja sincronizar também, digamos, um arquivo chamado phil, você pode mover philpara um diretório que seja sincronizado deer/synced-root-files/e adicionar umligação simbólicadesse arquivo de volta para o seu diretório raiz

    cd ROOT; ln -s ROOT/deer/synced-root-files/phil
    
  2. Invente uma convenção de nomenclatura em seu diretório raiz com a qual você possa combinar padrões. Por exemplo, nomeie todos e somente os arquivos que vocênãodeseja sincronizar algo como ignore.phile adicionar uma linha ao seu perfil Unison ignore = Path ignore.*.

Aqui está um link para oEspecificação de caminhoeIgnorando caminhosseções do manual Unison para que futuros leitores possam encontrá-lo facilmente.

informação relacionada