Mantenha os arquivos sob controle de versão. Isso tem vários benefícios, incluindo facilitar a manutenção de arquivos sincronizados (confirmar em uma máquina, atualizar os outros) e manter um histórico de alterações (para que você possa descobrir com facilidade o que quebrou um programa que funcionou no mês passado).
Eu uso o CVS e sincronizo os repositórios com o Unison ou o sneakernet, mas isso é porque venho fazendo isso desde um tempo antes do controle de versão distribuído amplamente disponível. Qualquer um que comece agora deve usar uma ferramenta controle de versão distribuída adequada, como bazar, darcs, git, mercurial, ...
Gerenciar arquivos que precisam diferir entre as máquinas é sempre um pouco trabalhoso. Se o idioma de configuração permitir condicionais, use-os. Caso contrário, se houver um mecanismo de inclusão, use-o para dividir o arquivo de configuração em uma parte dependente da máquina e uma parte compartilhada. Mantenha todas as partes dependentes da máquina em um diretório separado (algo como ~/.local/NAME/
), que é sempre mencionado por meio de um link simbólico ( ~/.here
- > local/NAME
em cada máquina). Eu tenho alguns arquivos que são gerados por um script na parte compartilhada a partir de parâmetros mantidos na parte específica da máquina; isso impede a modificação desses arquivos indiretamente por meio de uma interface de configuração da GUI. Evite configurar coisas em /etc
, é mais difícil sincronizar entre máquinas.