Enfim postando no blog agora que não tenho mais dor de cabeça universidade, mas vamos ao que interessa.
A muito tempo atrás vinha procurando uma forma de sincronizar minhas configurações de usuário como chaves públicas, scripts, hosts através de várias máquinas, uma vez que tenho que manter em sincronia a minha máquina no trabalho, notebook pessoal, desktop pessoal (fora as máquinas virtuais).
A um tempo tentei algo como um script que utilizava scp, para sincronizar diretórios, mas com o problema de consumo de banda (o que no Brasil é um grande problema) e sobrescrever alterações, resolvi adotar o rsync que já otimizava o uso da banda enviando somente as alterações e faz a checagem da data de modificação porém ele não faz nenhuma verificação quanto ao conteúdo do arquivo, e isto trazia um sério problema pois uma vez que houvessem alterações em duas máquinas, teríamos um sério problema na hora de sincronizar os arquivos.
Um dia desses no trabalho, utilizando o subversion para controle de versão em um projeto, ele fornece backup dos arquivos, histórico de alterações, otimiza o consumo de banda enviando somente alterações e ainda por cima verifica o conteúdo dos arquivos em questão.. Comecei a associar as coisas, e isto parecia ser uma possível solução para o meu problema, por que não tentar?
Criado o repositório online, ja que todas máquinas tem acesso a internet, dei um checkout na minha $HOME para criar os diretórios .svn de controle, a primeira coisa que fiz foi ignorar todos arquivos na minha pasta pessoal com o comando:
svn propset svn:ignore *
Isto deve ser feito senão todos arquivos na HOME serão tratados como desconhecidos e perguntado se não devem ser adicionados ao controle de versão e não queremos isto, queremos fazer o controle de somente alguns arquivos/diretórios que são de nosso interesse.
logo após esse procedimento podemos começar a adicionar nossos arquivos ao controle de versão, como por exemplo nossa pasta .ssh e .gnupg para ter nossa chave pública em todas as máquinas:
$ svn add .ssh $ svn add .gnupg
Caso queira ignorar algum arquivo como o known_hosts na pasta ssh proceda da seguinte forma:
$ svn rm --keep-local known_hosts $ svn propset svn:ignore known_hosts
Uma vez feito isto já temos os arquivos que queremos no controle de versão e só falta o commit:
$ svn status -uv # cheque se esta tudo ok ;) $ svn commit -m "commit inicial da home"
Estou usando a algum tempo este procedimento, e tem dado muito certo, uma vez que não perco meus arquivos, mantenho um registro das alterações e tenho minhas máquinas (virtuais) sincronizadas. happy syncin’.
Ótima dica!!
Acho que essa parte de sincronização entre computadores (mesmo de arquivo, nem digo configurações) é a mais desejadas entre o pessoal que trabalha diariamente com vários computadores diferentes. Nos sistemas unix-like parece ser mais fácil manter as coisas em ordem pela flexibilidade que o SO te dá, mas no Windows isso não é muito fácil não.
Aproveitando o assunto, se alguém procura algo para o Windows, eu tenho usado o SyncBack. Foi o melhor que achei até agora, mas mesmo assim faço uso de um HD externo onde faço um mirror e depois atualizo as outras máquinas a partir dele.
Vida longa ao coding.com.br, espero encontrar mais posts aqui hein!! \o/\o/\o/\o/
Link | fevereiro 6th, 2010 at 18:47
Ae Gu,
Valeu pelos comentários, pode esperar que sempre que der vamos fazendo mais posts sim, só pintar algo interessante que colocamos aqui heheh
Agora se quiser usar algo desse tipo no windao, pode usar o tortoise svn como cliente svn para manter seus arquivos, e se quiser utilizar algum comando dos unix-like uma boa pedida pode ser o cygwin ou até mesmo o projeto gnuwin32 que porta e gera os binários de diversos programas gnu para o win32.
Abraços!
Link | fevereiro 6th, 2010 at 19:01