Estou tentando ignorar .git
e .bundle
diretórios node_module
da 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 = name
ignora 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
, .bundle
e node_module
todos 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 root
diretório inteiro, há um caso infeliz que isso não cobre: quando esses arquivos estão no nível superior, diretamente no root
diretório que você está sincronizando; nesse caso, não há /
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 .*,*
os padrões globbing, mas esses padrões corresponderãoqualquerarquivo com um nome como foo.git
também. Portanto, você pode decidir não ter nenhum diretório/arquivo chamado .git
, etc, no nível superior do seu root
diretório ou, se estiver bem, combinando coisas como foo.git
também, poderá usar as linhas:
ignore = Name {.*,*,*/,.*/}.git
ignore = Name {.*,*,*/,.*/}.bundle
ignore = Name {.*,*,*/,.*/}node_module