![Como você ignora todos os arquivos, mas não os subdiretórios, com o Unison?](https://rvso.com/image/1568326/Como%20voc%C3%AA%20ignora%20todos%20os%20arquivos%2C%20mas%20n%C3%A3o%20os%20subdiret%C3%B3rios%2C%20com%20o%20Unison%3F.png)
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 ignore
diretiva (mantendo todos os subdiretórios) e adicionar novamente os poucos arquivos que desejo manter com a ignorenot
diretiva. Para fazer isso, tentei as duas coisas a seguir:
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 ^(?!.*\/).*$"."
Primeiro ignorando tudo com
ignore = Name ?*
e depois adicionando novamente todos os caminhos que contêm uma barra comignorenot = 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 deer
e um arquivo nomeado phil
sob root ROOT
, o Unison os verá nomeados como
new dir ----> ROOT/deer
new file ----> ROOT/phil
Você não consegue distinguir entre ROOT/deer
e ROOT/phil
. Aqui estão algumas sugestões
Especifique manualmente os diretórios que deseja sincronizar adicionando uma linha
path = deer
ao 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 chamadophil
, você pode moverphil
para um diretório que seja sincronizadodeer/synced-root-files/
e adicionar umligação simbólicadesse arquivo de volta para o seu diretório raizcd ROOT; ln -s ROOT/deer/synced-root-files/phil
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.phil
e adicionar uma linha ao seu perfil Unisonignore = Path ignore.*
.
Aqui está um link para oEspecificação de caminhoeIgnorando caminhosseções do manual Unison para que futuros leitores possam encontrá-lo facilmente.