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

2

Eu 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 usando a diretiva ignore (mantendo todos os subdiretórios) e adicionando novamente os poucos arquivos que desejo manter com a diretiva ignorenot . 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 da seguinte forma, sem mais explicações:

    Malformed pattern "Regex ^(?!.*\/).*$"." 
    
  2. Primeiro ignorando tudo com ignore = Name ?* e, em seguida, adicionando novamente cada caminho que contenha uma barra com ignorenot = Path */* , que não funcionou como esperado, já que não ignorar diretórios não funciona dessa maneira.

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

    
por soriak 19.08.2018 / 07:42

1 resposta

0

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 diferenciar os dois, mas o Unison não se refere a eles de forma diferente (por exemplo, prefixando / em diretórios ou algo assim) de uma maneira que permita ao usuário padronizar jogo contra um ou outro. Por exemplo, se você sincronizar um diretório chamado deer e um arquivo chamado phil sob a raiz ROOT , o Unison os verá nomeados como

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

Você não pode distinguir entre ROOT/deer e ROOT/phil . Aqui estão algumas sugestões embora

  1. Especifique manualmente os diretórios que você deseja sincronizar, adicionando uma linha path = deer ao seu perfil para cada diretório. Eu acho que esta é a maneira padrão de configurar o Unison de qualquer maneira. Então, para qualquer arquivo no diretório raiz que você deseja sincronizar também, digamos, um arquivo chamado phil , você pode mover phil para um diretório que é sincronizado como deer/synced-root-files/ e depois adicionar um symbolic link desse arquivo de volta para o diretório raiz

    cd ROOT; ln -s ROOT/deer/synced-root-files/phil
    
  2. Invente uma convenção de nomenclatura no diretório raiz com a qual você pode corresponder o padrão. Por exemplo, nomeie todos e somente os arquivos que você não deseja sincronizar algo como ignore.phil e adicione uma linha ao seu perfil do Unison ignore = Path ignore.* .

Aqui está um link para a especificação do caminho e Ignorando caminhos do manual do Unison para que os futuros leitores possam encontrá-lo facilmente.

    
por 20.08.2018 / 07:12