Unison não ignora caminhos

Unison não ignora caminhos

Estou tentando ignorar .gite .bundlediretórios node_moduleda minha sincronização. Eu tentei várias combinações diferentes tentando fazê-lo funcionar, mas toda vez que sincronizo, consigo ver todos esses diretórios sendo sincronizados com a máquina remota.

Alguém pode identificar o que estou fazendo de errado?

~/.unison/default.prf

# Roots of the synchronization
root = /Users/bob/synced
root = ssh://bob@remotebox/synced

# Paths to synchronize
path = hack/testdir

# Some regexps specifying names and paths to ignore
ignore = Name *.log
ignore = Name .DStore
ignore = Name .DS_Store
ignore = Name *.output
ignore = Name *:*
ignore = Path {*/.git/*}
ignore = Path {*/.bundle/*}
ignore = Path {*/.vagrant/*}
ignore = Path {*/.git}
ignore = Path {*/.bundle}
ignore = Path {*/node_modules}

# Window height
height = 37

# propogate file modification times
times = true

# Log actions to the terminal
log = true

auto = true
batch = true

Isso está sincronizando do OSX para o Windows 10, se isso ajudar.

Responder1

Aqui está um link para oEspecificações de caminho e caminho ignoradoseção do manual do Unison porque é minha seção favorita ao responder perguntas sobre o Unison. Observe que isso ignore Name = nameignora qualquer caminho no qual o último componente corresponda name. Também

[O caractere] *corresponde a qualquer sequência de caracteres que não inclua /(e não comece com ., quando usado no início de um nome).

Portanto, podemos ignorar caminhos da mesma forma que ignoramos certos tipos de arquivos. Considerando o fato de que seu .git, .bundlee node_moduletodos terão um /caractere inicial, mas podem ser encontrados em um diretório oculto que começa com ., as seguintes linhas são o que você deseja:

ignore = Name {*/,.*/}.git
ignore = Name {*/,.*/}.bundle
ignore = Name {*/,.*/}node_module

Para quem apenas sincroniza o rootdiretório inteiro, há um caso infeliz que isso não cobre: ​​quando esses arquivos estão no nível superior, diretamente no rootdiretório que você está sincronizando; nesse caso, não há /caractere inicial. Esse problema é evitado no perfil acima porque apenas o diretório testdirestá sendo sincronizado com a linha path = hack/testdir. De qualquer forma, para alguém que sincroniza todo o diretório raiz, você pode adicionar algo como .*,*os padrões globbing, mas esses padrões corresponderãoqualquerarquivo com um nome como foo.gittambém. Portanto, você pode decidir não ter nenhum diretório/arquivo chamado .git, etc, no nível superior do seu rootdiretório ou, se estiver bem, combinando coisas como foo.gittambém, poderá usar as linhas:

ignore = Name {.*,*,*/,.*/}.git
ignore = Name {.*,*,*/,.*/}.bundle
ignore = Name {.*,*,*/,.*/}node_module

informação relacionada