Unison não ignorando caminhos

2

Estou tentando ignorar os diretórios .git , .bundle e node_module da minha sincronização. Eu tentei um monte de combinações diferentes tentando fazê-lo funcionar, mas toda vez que eu sincronizo eu posso ver todos esses diretórios de sincronização para a máquina remota.

Alguém consegue identificar o que estou fazendo 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á sendo sincronizado do OSX para o Windows 10, se isso ajudar.

    
por Marklar 21.08.2018 / 11:16

1 resposta

2

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

[The character] * matches any sequence of characters not including / (and not beginning with ., when used at the beginning of a name).

Assim, podemos ignorar os caminhos da mesma maneira que ignoramos certos tipos de arquivos. Considerando o fato de que .git , .bundle e node_module terão um caractere / inicial, mas podem ser encontrados em um diretório oculto que começa com . , as linhas a seguir são o que você deseja :

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

Para quem apenas sincroniza todo o diretório root , há um caso lastimável que isso não cobre: quando esses arquivos estão no nível superior, bem no diretório root que você está sincronizando, em Nesse caso, não há nenhum caractere / inicial. Esse problema é evitado no perfil acima porque apenas o diretório testdir está 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 .*,* aos padrões globbing, mas esses padrões corresponderão a qualquer arquivo com um nome como foo.git . Assim, você pode decidir não ter diretórios / arquivos com o nome .git , etc, no nível superior do diretório root , ou se você concordar com coisas como foo.git , então pode usar as linhas :

ignore = Name {.*,*,*/,.*/}.git
ignore = Name {.*,*,*/,.*/}.bundle
ignore = Name {.*,*,*/,.*/}node_module
    
por 21.08.2018 / 18:35

Tags